diff --git a/noisemodelling-emission/pom.xml b/noisemodelling-emission/pom.xml index ca0ce41ed..cc61cafd5 100644 --- a/noisemodelling-emission/pom.xml +++ b/noisemodelling-emission/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 UTF-8 @@ -13,7 +14,9 @@ 4.0.4 ../pom.xml - Translate light vehicle, heavy vehicle, public bus, tramway traffic into linear noise source. Then compute sound propagation and iso surface. + Computes sound emission levels from sound source characteristics (vehicle flow, vehicle type, sound + source type, etc.) + junit @@ -68,7 +71,7 @@ org.noise_planet.noisemodelling.emission.* - IFSTTAR, IRSTV - FR CNRS 2488 + UMRAE, Universite Gustave Eiffel, Cerema org.slf4j;version="[1.6.0,2)",!org.h2.*,* ${buildNumber} diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/DirectionAttributes.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/DirectionAttributes.java deleted file mode 100644 index 206a624d9..000000000 --- a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/DirectionAttributes.java +++ /dev/null @@ -1,32 +0,0 @@ -/** - * NoiseModelling is an open-source tool designed to produce environmental noise maps on very large urban areas. It can be used as a Java library or be controlled through a user friendly web interface. - * - * This version is developed by the DECIDE team from the Lab-STICC (CNRS) and by the Mixt Research Unit in Environmental Acoustics (Université Gustave Eiffel). - * - * - * NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. - * - * Contact: contact@noise-planet.org - * - */ - -package org.noise_planet.noisemodelling.emission; - -public interface DirectionAttributes { - - /** - * @param frequency Frequency in Hertz - * @param phi (0 2π) 0 is front - * @param theta (-π/2 π/2) 0 is horizontal π is top - * @return Attenuation in dB - */ - double getAttenuation(double frequency, double phi, double theta); - - /** - * @param frequencies Frequency in Hertz (same order will be returned) - * @param phi (0 2π) 0 is front - * @param theta (-π/2 π/2) 0 is horizontal π is top - * @return Attenuation in dB for each frequency - */ - double[] getAttenuationArray(double[] frequencies, double phi, double theta); -} diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/EvalTramwaySource.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/EvalTramwaySource.java deleted file mode 100644 index c511b1655..000000000 --- a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/EvalTramwaySource.java +++ /dev/null @@ -1,65 +0,0 @@ -/** - * NoiseModelling is an open-source tool designed to produce environmental noise maps on very large urban areas. It can be used as a Java library or be controlled through a user friendly web interface. - * - * This version is developed by the DECIDE team from the Lab-STICC (CNRS) and by the Mixt Research Unit in Environmental Acoustics (Université Gustave Eiffel). - * - * - * NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. - * - * Contact: contact@noise-planet.org - * - */ - -package org.noise_planet.noisemodelling.emission; - -/** - * Evaluation of Tramway sound source - * @Author Nicolas Fortin - */ - -public class EvalTramwaySource { - /** Utility class */ - private EvalTramwaySource() {} - public enum GROUND_TYPE {GRASS, RIGID} - public static final double grass_a_factor=26.; - public static final double rigid_a_factor=26.; - public static final double grass_b_factor=75.; - public static final double rigid_b_factor=78.; - public static final double speed_reference=40.; - - - /** - * Evaluation of Tramway sound source - * @param speed Average tramway speed - * @param tw_per_hour Average tramway count per hour - * @param ground_type Ground category - * @param has_anti_vibration True if rails lies on anti-vibration system - * @return Value in dB(A) - */ - public static double evaluate(final double speed, final double tw_per_hour, final GROUND_TYPE ground_type, - boolean has_anti_vibration) { - final double a_factor,b_factor; - switch (ground_type) { - case GRASS: - a_factor=grass_a_factor; - b_factor=grass_b_factor; - break; - case RIGID: - a_factor=rigid_a_factor; - b_factor=rigid_b_factor; - break; - default: - throw new IllegalArgumentException("Unknown ground type"); - } - double delta_corr=0; - if(has_anti_vibration) { - delta_corr+=-2; - } - // /////////////////////// - // Noise Tramway - return a_factor * Math.log10(speed / speed_reference) + - b_factor + - delta_corr + - Math.log10(tw_per_hour); - } -} \ No newline at end of file diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/EvaluateRailwaySourceCnossos.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/EvaluateRailwaySourceCnossos.java deleted file mode 100644 index c800eaa9f..000000000 --- a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/EvaluateRailwaySourceCnossos.java +++ /dev/null @@ -1,539 +0,0 @@ -/** - * NoiseModelling is an open-source tool designed to produce environmental noise maps on very large urban areas. It can be used as a Java library or be controlled through a user friendly web interface. - * - * This version is developed by the DECIDE team from the Lab-STICC (CNRS) and by the Mixt Research Unit in Environmental Acoustics (Université Gustave Eiffel). - * - * - * NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. - * - * Contact: contact@noise-planet.org - * - */ - -package org.noise_planet.noisemodelling.emission; - -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.NullNode; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Iterator; -import java.util.Locale; -import java.util.Map; - -import static java.lang.Math.min; -import static org.noise_planet.noisemodelling.emission.Utils.Vperhour2NoiseLevel; -import static org.noise_planet.noisemodelling.emission.utils.interpLinear.interpLinear; - - - -/** - * Railway noise evaluation from Cnossos reference : COMMISSION DIRECTIVE (EU) 2015/996 - * of 19 May 2015 establishing common noise assessment methods according to Directive 2002/49/EC - * of the European Parliament and of the Council - * - * amending, for the purposes of adapting to scientific and technical progress, Annex II to - * Directive 2002/49/EC of the European Parliament and of the Council as regards - * common noise assessment methods - * - * part 2.3. Railway noise - * - * Return the dB value corresponding to the parameters - * @author Adrien Le Bellec - univ Gustave eiffel - * @author Olivier Chiello, Univ Gustave Eiffel - */ - -public class EvaluateRailwaySourceCnossos { - private JsonNode CnossosRailWayData; - private JsonNode CnossosRailWayData2020; - private JsonNode CnossosRailWayDataSncf; - private JsonNode CnossosVehicleData; - private JsonNode CnossosTrainData; - - public void setEvaluateRailwaySourceCnossos(InputStream cnossosVehicleData,InputStream cnossosTrainData ) { - this.CnossosVehicleData = parse(cnossosVehicleData); - this.CnossosTrainData = parse(cnossosTrainData); - } - - private static JsonNode parse(InputStream inputStream) { - try { - ObjectMapper mapper = new ObjectMapper(); - return mapper.readTree(inputStream); - } catch (IOException ex) { - return NullNode.getInstance(); - } - } - - public JsonNode getCnossosRailWayData(int spectreVer){ - if (spectreVer==1){ - if(CnossosRailWayData2020 == null) { - CnossosRailWayData2020 = parse(EvaluateRailwaySourceCnossos.class.getResourceAsStream("coefficients_Railway_Cnossos_2020.json")); - } - return CnossosRailWayData2020; - } else if (spectreVer==2) { - if(CnossosRailWayDataSncf == null) { - CnossosRailWayDataSncf = parse(EvaluateRailwaySourceCnossos.class.getResourceAsStream("coefficients_Railway_Cnossos_SNCF.json")); - } - return CnossosRailWayDataSncf; - } else { - if(CnossosRailWayData == null) { - CnossosRailWayData = parse(EvaluateRailwaySourceCnossos.class.getResourceAsStream("coefficients_Railway_Cnossos_SNCF.json")); - } - return CnossosRailWayData; - } - } - - public static Iterable iteratorToIterable(Iterator iterator) { - return () -> iterator; - } - - public JsonNode getCnossosVehicleNode(String typeVehicle) { - JsonNode vehicle = getCnossosVehicleData().get(typeVehicle); - if(vehicle == null) { - throw new IllegalArgumentException(String.format("Vehicle %s not found must be one of :\n -%s", typeVehicle, - String.join("\n -", iteratorToIterable(getCnossosVehicleData().fieldNames())))); - } - return vehicle; - } - - public JsonNode getCnossosVehicleData(){ - if(CnossosVehicleData == null) { - CnossosVehicleData = parse(EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Vehicles_SNCF_2021.json")); - } - return CnossosVehicleData; - } - - public JsonNode getCnossosTrainData(){ - if(CnossosTrainData == null) { - CnossosTrainData = parse(EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Train_SNCF_2021.json")); - } - return CnossosTrainData; - } - - public Map getVehicleFromTrain(String trainName){ - Map vehicles = null; - for (Iterator> it = getCnossosTrainData().fields(); it.hasNext(); ) { - Map.Entry elt = it.next(); - if (trainName.equals(elt.getKey())) - { - - ObjectMapper mapper = new ObjectMapper(); - vehicles = mapper.convertValue(elt.getValue(),new TypeReference>(){}); - break; - } - } - return vehicles; - } - - - - public boolean isInVehicleList(String trainName) { - boolean inlist = false; - for (Iterator> it = getCnossosVehicleData().fields(); it.hasNext(); ) { - Map.Entry elt = it.next(); - if (trainName.equals(elt.getKey())) { - inlist = true; - break; - } - } - return inlist; - } - - private static int getFreqInd(int freq){ - int Freq_ind; - switch (freq) { - case 50: - Freq_ind=0; - break; - case 63: - Freq_ind=1; - break; - case 80: - Freq_ind=2; - break; - case 100: - Freq_ind=3; - break; - case 125: - Freq_ind=4; - break; - case 160: - Freq_ind=5; - break; - case 200: - Freq_ind=6; - break; - case 250: - Freq_ind=7; - break; - case 315: - Freq_ind=8; - break; - case 400: - Freq_ind=9; - break; - case 500: - Freq_ind=10; - break; - case 630: - Freq_ind=11; - break; - case 800: - Freq_ind=12; - break; - case 1000: - Freq_ind=13; - break; - case 1250: - Freq_ind=14; - break; - case 1600: - Freq_ind=15; - break; - case 2000: - Freq_ind=16; - break; - case 2500: - Freq_ind=17; - break; - case 3150: - Freq_ind=18; - break; - case 4000: - Freq_ind=19; - break; - case 5000: - Freq_ind=20; - break; - case 8000: - Freq_ind=21; - break; - case 10000: - Freq_ind=22; - break; - default: - Freq_ind=0; - } - return Freq_ind; - } - - - - public Double getLambdaValue(String typeVehicle, String refType, int spectreVer, int lambdaId) { // - int refId = getCnossosVehicleNode(typeVehicle).get(refType).intValue(); - String ref = ""; - if(refType.equals("RefRoughness")){ref = "WheelRoughness";} - else if(refType.equals("RefContact")){ref = "ContactFilter";} - return getCnossosRailWayData(spectreVer).get("Vehicle").get(ref).get( String.valueOf(refId)).get("Values").get(lambdaId).doubleValue(); - } - public Double getTrackRoughness(int trackRoughnessId, int spectreVer, int lambdaId) { // - return getCnossosRailWayData(spectreVer).get("Track").get("RailRoughness").get( String.valueOf(trackRoughnessId)).get("Values").get(lambdaId).doubleValue(); - } - public double getAxlesPerVeh(String typeVehicle) { // - return getCnossosVehicleNode(typeVehicle).get("NbAxlePerVeh").doubleValue(); - } - - public int getNbCoach(String typeVehicle) { // - int nbCoach ; - try { - nbCoach = getCnossosVehicleData().get(typeVehicle).get("NbCoach").intValue(); - } catch (Exception e) { - nbCoach = 1; - } - - return nbCoach; - } - - public double getSpectre(String typeVehicle, String ref, int runningCondition,String sourceHeight, int spectreVer, int freqId) { // - int refId = getCnossosVehicleNode(typeVehicle).get(ref).intValue(); - if(ref.equals("RefTraction")) { - double tractionSpectre=0; - String condition= "ConstantSpeed"; - if (refId != 0) { - switch(runningCondition){ - case 0 : - condition = "ConstantSpeed"; - break; - case 1 : - condition = "AccelerationSpeed"; - break; - case 3 : - condition = "DecelerationSpeed"; - break; - case 4 : - condition = "IdlingSpeed"; - break; - } - try { - tractionSpectre = getCnossosRailWayData(spectreVer).get("Vehicle").get(condition).get(String.valueOf(refId)).get("Values").get(sourceHeight).get(freqId).doubleValue(); - } catch (NullPointerException ex) { - throw new IllegalArgumentException(String.format(Locale.ROOT, "Could not find traction spectrum for the following parameters " + - "getCnossosRailWayData(%d).get(\"Vehicle\").get(%s).get(String.valueOf" + - "(%d)).get(\"Values\").get(%s).get(%d)", spectreVer, condition, refId, sourceHeight, freqId)); - } - } - return tractionSpectre; - }else if(ref.equals("RefAerodynamic") ){ - double aerodynamicNoise; - aerodynamicNoise = getCnossosRailWayData(spectreVer).get("Vehicle").get("AerodynamicNoise").get(String.valueOf(refId)).get("Values").get(sourceHeight).get(freqId).doubleValue(); - return aerodynamicNoise; - }else{ - return 0; - } - } - public double getAeroV0Alpha(String typeVehicle, String ref, int spectreVer, String aeroInf){ - int refId = getCnossosVehicleNode(typeVehicle).get(ref).intValue(); - return Double.parseDouble(getCnossosRailWayData(spectreVer).get("Vehicle").get("AerodynamicNoise").get(String.valueOf(refId)).get(aeroInf).asText()); - } - public Double getBridgeStructural(int bridgeId, int spectreVer, int freqId){ - return getCnossosRailWayData(spectreVer).get("Track").get("BridgeConstant").get(String.valueOf(bridgeId)).get("Values").get(freqId).doubleValue(); - } - - public Double getTrackTransfer(int trackTransferId, int spectreVer, int freqId) { // - return getCnossosRailWayData(spectreVer).get("Track").get("TrackTransfer").get(String.valueOf(trackTransferId)).get("Spectre").get(freqId).doubleValue(); - } - public Double getImpactNoise(int impactNoiseId, int spectreVer, int freqId) { // - return getCnossosRailWayData(spectreVer).get("Track").get("ImpactNoise").get(String.valueOf(impactNoiseId)).get("Values").get(freqId).doubleValue(); - } - - public Double getVehTransfer(String typeVehicle, int spectreVer, int freqId) { - int RefTransfer = getCnossosVehicleNode(typeVehicle).get("RefTransfer").intValue(); - return getCnossosRailWayData(spectreVer).get("Vehicle").get("Transfer").get(String.valueOf(RefTransfer)).get("Spectre").get(freqId).doubleValue(); - - } - public Double getLRoughness(String typeVehicle, int trackRoughnessId, int spectreVer, int idLambda) { // - double wheelRoughness = getLambdaValue(typeVehicle, "RefRoughness",spectreVer, idLambda); - //double contactFilter = getLambdaValue(typeVehicle, "RefContact",spectreVer, idLambda); - double trackRoughness = getTrackRoughness(trackRoughnessId, spectreVer, idLambda); - return 10 * Math.log10(Math.pow(10,wheelRoughness/10) + Math.pow(10,trackRoughness/10) ) ;//+ contactFilter; - } - - private double[] checkNanValue(double[] roughnessLtot) { - int indice_NaN= 0; - for(int i = 0; i < 24 ; i++) { - if (Double.isNaN(roughnessLtot[i])) { - indice_NaN++; - } - } - for(int i = 0; i < indice_NaN ; i++) { - roughnessLtot[i] = roughnessLtot[indice_NaN+1]; - } - return roughnessLtot; - } - - /** - * Track noise evaluation. - * @param vehicleParameters Vehicle Noise emission parameters - * @param trackParameters Track Noise emission parameters - * constant speed - - * @return LWRoll / LWTraction A & B / LWAerodynamic A & B / LWBridge level in dB - **/ - public RailWayLW evaluate(RailwayVehicleParametersCnossos vehicleParameters, RailwayTrackParametersCnossos trackParameters) { - - final int spectreVer = vehicleParameters.getSpectreVer(); - - String typeVehicle = vehicleParameters.getTypeVehicle(); - double speedVehicle = vehicleParameters.getSpeedVehicle(); - double vehPerHour = vehicleParameters.getNumberVehicle(); - double axlesPerVeh = getAxlesPerVeh(typeVehicle); - int runningCondition = vehicleParameters.getRunningCondition(); - - double speedTrack = trackParameters.getSpeedTrack(); - double speedCommercial = trackParameters.getSpeedCommercial(); - int trackRoughnessId = trackParameters.getRailRoughness(); - int trackTransferId = trackParameters.getTrackTransfer(); - int impactId = trackParameters.getImpactNoise(); - int bridgeId = trackParameters.getBridgeTransfert(); - int curvature = trackParameters.getCurvature(); - - // get speed of the vehicle - double speed = min(speedVehicle,min(speedTrack, speedCommercial)); - - boolean isTunnel = trackParameters.getIsTunnel(); - // %% Take into account the number of coach and the number of units - // 10*log10(NbUnit*NbCoach); - - - if(isTunnel){ - double [] lWSpectre = new double[24]; - for(int idFreq = 0; idFreq < 24; idFreq++) { - lWSpectre[idFreq] =-99; - } - RailWayLW lWRailWay = new RailWayLW(lWSpectre, lWSpectre, lWSpectre, lWSpectre, lWSpectre, lWSpectre); - return lWRailWay; - }else { - // Rolling noise calcul - double[] lWRolling = evaluateLWroughness("Rolling", typeVehicle, trackRoughnessId, impactId, bridgeId, curvature, speed, trackTransferId, spectreVer, axlesPerVeh); - // Traction noise calcul - double[] lWTractionA = evaluateLWSpectre(typeVehicle, "RefTraction", runningCondition, speed, 0, spectreVer); - double[] lWTractionB = evaluateLWSpectre(typeVehicle, "RefTraction", runningCondition, speed, 1, spectreVer); - // Aerodynamic noise calcul - double[] lWAerodynamicA = evaluateLWSpectre(typeVehicle, "RefAerodynamic", runningCondition, speed, 0, spectreVer); - double[] lWAerodynamicB = evaluateLWSpectre(typeVehicle, "RefAerodynamic", runningCondition, speed, 1, spectreVer); - // Bridge noise calcul - double[] lWBridge = evaluateLWroughness("Bridge", typeVehicle, trackRoughnessId, impactId, bridgeId, curvature, speed, trackTransferId, spectreVer, axlesPerVeh); - - for (int i=0;i - * - * NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. - * - * Contact: contact@noise-planet.org - * - */ - -package org.noise_planet.noisemodelling.emission; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.NullNode; - -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Locale; - -import static org.noise_planet.noisemodelling.emission.Utils.*; - -/** - * Return the dB value corresponding to the parameters - * Reference document is "Commission Directive (EU) 2015/996 of 19 May 2015 establishing common noise assessment methods according to Directive 2002/49/EC of the European Parliament and of the Council (Text with EEA relevance)" 2015 - * including its 2019 amendments - * https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=OJ:JOL_2015_168_R_0001 for 2015 version - * @Author Nicolas Fortin, Université Gustave Eiffel - * @Author Pierre Aumond, Université Gustave Eiffel - 27/04/2017 - Update 12/01/2021 - */ - -public class EvaluateRoadSourceCnossos { - - private static JsonNode cnossosData = parse(EvaluateRoadSourceCnossos.class.getResourceAsStream("coefficients_Road_Cnossos_2015.json")); - private static JsonNode cnossosData2019 = parse(EvaluateRoadSourceCnossos.class.getResourceAsStream("coefficients_Road_Cnossos_2020.json")); // new coefficients in 2019 amendments - - private static JsonNode parse(InputStream inputStream) { - try { - ObjectMapper mapper = new ObjectMapper(); - return mapper.readTree(inputStream); - } catch (IOException ex) { - return NullNode.getInstance(); - } - } - - public static JsonNode getCnossosData(int coeffVer) { - if (coeffVer == 1) { - return cnossosData; - } else { - return cnossosData2019; - } - } - - /** - * Get a Road Coeff for a frequency value - * @param Freq Frequency in Hz (ocrave band) - * @param vehCat Vehicle category - * @param RoadSurface Road surface identifier - * @param coeffVer 2015 or 2019 coefficients version - * @return a Road Coeff - */ - public static Double getA_Roadcoeff(int Freq, String vehCat, String RoadSurface, int coeffVer) { //CNOSSOS-EU_Road_Catalogue_Final - 01April2014.xlsx - accessed on line 2017 at : https://circabc.europa.eu/webdav/CircaBC/env/noisedir/Library/Public/cnossos-eu/Final_methods%26software - int Freq_ind; - switch (Freq) { - case 63: - Freq_ind = 0; - break; - case 125: - Freq_ind = 1; - break; - case 250: - Freq_ind = 2; - break; - case 500: - Freq_ind = 3; - break; - case 1000: - Freq_ind = 4; - break; - case 2000: - Freq_ind = 5; - break; - case 4000: - Freq_ind = 6; - break; - case 8000: - Freq_ind = 7; - break; - default: - Freq_ind = 0; - } - JsonNode roadsNode = getCnossosData(coeffVer).get("roads"); - if(!roadsNode.has(RoadSurface)) { - List roadSurfaces = new ArrayList<>(); - roadsNode.fieldNames().forEachRemaining(roadSurfaces::add); - throw new IllegalArgumentException(String.format(Locale.ROOT, - "Provided road pavement \"%s\" not known ! Please provided one of the following pavements" + - " instead : %s",RoadSurface, String.join(", ", roadSurfaces))); - } - return roadsNode.get(RoadSurface).get("ref").get(vehCat).get("spectrum").get(Freq_ind).doubleValue(); - } - - /** - * Get b Road Coeff - * @param vehCat Vehicle category - * @param roadSurface Road surface identifier - * @param coeffVer 2015 or 2019 coefficients version - * @return b Road Coeff - */ - public static Double getB_Roadcoeff(String vehCat, String roadSurface, int coeffVer) { //CNOSSOS-EU_Road_Catalogue_Final - 01April2014.xlsx - https://circabc.europa.eu/webdav/CircaBC/env/noisedir/Library/Public/cnossos-eu/Final_methods%26software - JsonNode roadsNode = getCnossosData(coeffVer).get("roads"); - if(!roadsNode.has(roadSurface)) { - List roadSurfaces = new ArrayList<>(); - roadsNode.fieldNames().forEachRemaining(roadSurfaces::add); - throw new IllegalArgumentException(String.format(Locale.ROOT, - "Provided road pavement \"%s\" not known ! Please provided one of the following pavements" + - " instead : %s",roadSurface, String.join(", ", roadSurfaces))); - } - return roadsNode.get(roadSurface).get("ref").get(vehCat).get("ßm").doubleValue(); - } - - /** - * Get Cr coefficient - * @param vehCat Vehicle category - * @param k k=1 Crossing lights, k=2 roundabout - * @param coeffVer 2015 or 2019 coefficients version - * @return Cr coefficient - */ - public static double getCr(String vehCat, int k, int coeffVer) { - return getCnossosData(coeffVer).get("vehicles").get(vehCat).get(k == 1 ? "crossing" : "roundabout").get("cr").doubleValue(); - } - - /** - * Get Cp coefficient - * @param vehCat Vehicle category - * @param k k=1 Crossing lights, k=2 roundabout - * @param coeffVer 2015 or 2019 coefficients version - * @return Cp coefficient - */ - public static double getCp(String vehCat, int k, int coeffVer) { - return getCnossosData(coeffVer).get("vehicles").get(vehCat).get(k == 1 ? "crossing" : "roundabout").get("cp").doubleValue(); - } - - /** - * get Vehicle emission values coefficients - * @param coeff ar,br,ap,bp,a,b - * @param freq 0 = 63 Hz, 1 = 125 Hz, etc. - * @param vehicleCategory 1,2,3,4a,4b.. - * @return Vehicle emission values coefficients - */ - public static Double getCoeff(String coeff, int freq, String vehicleCategory, int coeffVer) { - int Freq_ind; - switch (freq) { - case 63: - Freq_ind = 0; - break; - case 125: - Freq_ind = 1; - break; - case 250: - Freq_ind = 2; - break; - case 500: - Freq_ind = 3; - break; - case 1000: - Freq_ind = 4; - break; - case 2000: - Freq_ind = 5; - break; - case 4000: - Freq_ind = 6; - break; - case 8000: - Freq_ind = 7; - break; - default: - Freq_ind = 0; - } - return getCnossosData(coeffVer).get("vehicles").get(vehicleCategory).get(coeff).get(Freq_ind).doubleValue(); - } - - /** - * Get rolling or motor sound level - * @param base coeff A - * @param adj coeff B - * @param speed vm in km/h - * @param speedBase vref in km/h - * @return - */ - private static Double getNoiseLvl(double base, double adj, double speed, - double speedBase) { - return base + adj * Math.log10(speed / speedBase); - } - - /** - * Correction for studded tyres - Eq. 2.2.6 - * @param parameters - * @param Pm_stud - * @param Ts_stud - * @param freqParam - * @param coeffVer - * @return - */ - private static Double getDeltaStuddedTyres(RoadSourceParametersCnossos parameters, double Pm_stud, double Ts_stud, - int freqParam, int coeffVer, double vRef) throws IOException { - double speed = parameters.getSpeedLv(); - double ps = Pm_stud * Ts_stud / 12; // Eq. 2.2.7 yearly average proportion of vehicles equipped with studded tyres - speed = (speed >= 90) ? 90 : speed; - speed = (speed <= 50) ? 50 : speed; - double deltastud = getNoiseLvl(getCoeff("a", freqParam, "1", coeffVer), getCoeff("b", freqParam, "1", coeffVer), speed, vRef); - return 10 * Math.log10((1 - ps) + ps * Math.pow(10, deltastud / 10)); // Eq. 2.2.8 - // Only for light vehicles (Eq.2.2.9) - } - - - private static Double getDeltaTemperature(double Temperature, String category) throws IOException { - double K = 0.08; - double tempRef = 20; - switch (category){ - case "1": - K = 0.08; - break; - case "2": - K = 0.04; - break; - case "3": - K = 0.04; - break; - } - - return K*(tempRef - Temperature); - } - - - private static Double getDeltaSlope(RoadSourceParametersCnossos parameters, String category, double sign) throws IOException { - - double deltaSlope = 0; - double slope = sign * parameters.getSlopePercentage(); - switch (category){ - case "1": - if (slope < -6) { - deltaSlope = (Math.min(12, -slope) - 6) / 1; - } else if (slope <= 2) { - deltaSlope = 0.; - } else { - deltaSlope = ((parameters.getSpeedLv() / 100) * ((Math.min(12, slope) - 2) / 1.5)); - } - break; - case "2": - // Medium and Heavy vehicles (cat 2 and 3) - Eq 2.2.14 and 2.2.15 - if (slope < -4) { - deltaSlope = ((parameters.getSpeedMv() - 20) / 100) * (Math.min(12, -slope) - 4) / 0.7; - } else if (slope <= 0) { - deltaSlope = 0.; - } else { - deltaSlope = (parameters.getSpeedMv() / 100) * (Math.min(12, slope)) / 1; - } - break; - case "3": - // Medium and Heavy vehicles (cat 2 and 3) - Eq 2.2.14 and 2.2.15 - if (slope < -4) { - deltaSlope = ((parameters.getSpeedHgv() - 10) / 100) * (Math.min(12, -slope) - 4) / 0.5; - } else if (slope <= 0) { - deltaSlope = deltaSlope + 0.; - } else { - deltaSlope = deltaSlope + (parameters.getSpeedHgv() / 100) * (Math.min(12, slope)) / 0.8; - } - break; - } - - // no effects on cat 4 vehicles Eq. 2.2.16 - return deltaSlope; - } - - - /** - * Energetic sum of 2 dB values - * @param dB1 First value in dB - * @param dB2 Second value in dB - * @return - */ - private static Double sumDbValues(Double dB1, Double dB2) { - return wToDb(dbToW(dB1) + dbToW(dB2)); - } - - /** - * Energetic sum of 5 dB values - * @param dB1 value in dB - * @param dB2 value in dB - * @param dB3 value in dB - * @param dB4 value in dB - * @param dB5 value in dB - * @return - */ - private static Double sumDb5(Double dB1, Double dB2, Double dB3, Double dB4, Double dB5) { - return wToDb(dbToW(dB1) + dbToW(dB2) + dbToW(dB3) + dbToW(dB4) + dbToW(dB5)); - } - - /** - * Road noise evaluation. - * @param parameters Noise emission parameters - * @return Noise level in dB - */ - public static double evaluate(RoadSourceParametersCnossos parameters) throws IOException { - final int freqParam = parameters.getFreqParam(); - final double Temperature = parameters.getTemperature(); - final double Ts_stud = parameters.getTsStud(); - final double Pm_stud = parameters.getqStudRatio(); - final double Junc_dist = parameters.getJunc_dist(); - final int Junc_type = parameters.getJunc_type(); - final String roadSurface = parameters.getRoadSurface(); - final int coeffVer = parameters.getCoeffVer(); - double vRef = 70.; - - /** - * Rolling Noise - */ - // Rolling noise level Eq. 2.2.4 - double lvRoadLvl = getNoiseLvl(getCoeff("ar", freqParam, "1", coeffVer), getCoeff("br", freqParam, "1", coeffVer), parameters.getSpeedLv(), vRef); - double medRoadLvl = getNoiseLvl(getCoeff("ar", freqParam, "2", coeffVer), getCoeff("br", freqParam, "2", coeffVer), parameters.getSpeedMv(), vRef); - double hgvRoadLvl = getNoiseLvl(getCoeff("ar", freqParam, "3", coeffVer), getCoeff("br", freqParam, "3", coeffVer), parameters.getSpeedHgv(), vRef); - // Rolling noise is only for categories 1, 2 and 3 - - // Correction for studded tyres - Eq. 2.2.6 - if (Pm_stud > 0 && Ts_stud > 0) { - lvRoadLvl = lvRoadLvl + getDeltaStuddedTyres(parameters, Pm_stud, Ts_stud, freqParam, coeffVer, vRef); - } - - // Effect of air temperature on rolling noise correction Eq 2.2.10 - lvRoadLvl = lvRoadLvl + getDeltaTemperature(Temperature, "1"); // K = 0.08 - medRoadLvl = medRoadLvl + getDeltaTemperature(Temperature, "2"); // K = 0.04 - hgvRoadLvl = hgvRoadLvl + getDeltaTemperature(Temperature, "3"); // K = 0.04 - - /** - * Propulsion Noise - */ - // General equation - Eq. 2.2.11 - double lvMotorLvl = getCoeff("ap", freqParam, "1", coeffVer) + getCoeff("bp", freqParam, "1", coeffVer) * (parameters.getSpeedLv() - vRef) / vRef; - double medMotorLvl = getCoeff("ap", freqParam, "2", coeffVer) + getCoeff("bp", freqParam, "2", coeffVer) * (parameters.getSpeedMv() - vRef) / vRef; - double hgvMotorLvl = getCoeff("ap", freqParam, "3", coeffVer) + getCoeff("bp", freqParam, "3", coeffVer) * (parameters.getSpeedHgv() - vRef) / vRef; - double wheelaMotorLvl = getCoeff("ap", freqParam, "4a", coeffVer) + getCoeff("bp", freqParam, "4a", coeffVer) * (parameters.getSpeedWav() - vRef) / vRef; - double wheelbMotorLvl = getCoeff("ap", freqParam, "4b", coeffVer) + getCoeff("bp", freqParam, "4b", coeffVer) * (parameters.getSpeedWbv() - vRef) / vRef; - - // Effect of road gradients - // This correction implicitly includes the effect of slope on speed. - // Light vehicles (cat 1) - Eq 2.2.13 - double sign = 1; - boolean twoWay = false; - switch ((int) parameters.getWay()){ - case 1: - sign = 1; - break; - case 2: - sign = -1; - break; - case 3: - twoWay = true; - } - - lvMotorLvl = lvMotorLvl + getDeltaSlope(parameters, "1", sign); - medMotorLvl = medMotorLvl + getDeltaSlope(parameters, "2", sign); - hgvMotorLvl = hgvMotorLvl + getDeltaSlope(parameters, "3", sign); - - /** - * Mixed effects (Rolling & Propulsion) - */ - // Effect of the acceleration and deceleration of vehicles - // Todo Here, we should get the Junc_dist by another way that we are doing now to be more precise issue #261 - double coefficientJunctionDistance = Math.max(1 - Math.abs(Junc_dist) / 100, 0); - // Effect of the acceleration and deceleration of vehicles - Rolling Noise Eq 2.2.17 - lvRoadLvl = lvRoadLvl + getCr("1", Junc_type, coeffVer) * coefficientJunctionDistance; - medRoadLvl = medRoadLvl + getCr("2", Junc_type, coeffVer) * coefficientJunctionDistance; - hgvRoadLvl = hgvRoadLvl + getCr("3", Junc_type, coeffVer) * coefficientJunctionDistance; - // Effect of the acceleration and deceleration of vehicles - Propulsion Noise Eq 2.2.18 - lvMotorLvl = lvMotorLvl + getCp("1", Junc_type, coeffVer) * coefficientJunctionDistance; - medMotorLvl = medMotorLvl + getCp("2", Junc_type, coeffVer) * coefficientJunctionDistance; - hgvMotorLvl = hgvMotorLvl + getCp("3", Junc_type, coeffVer) * coefficientJunctionDistance; - wheelaMotorLvl = wheelaMotorLvl + getCp("4a", Junc_type, coeffVer) * coefficientJunctionDistance; - wheelbMotorLvl = wheelbMotorLvl + getCp("4b", Junc_type, coeffVer) * coefficientJunctionDistance; - - // Effect of the type of road surface - Eq. 2.2.19 - lvRoadLvl = lvRoadLvl + getNoiseLvl(getA_Roadcoeff(freqParam, "1", parameters.getRoadSurface(), coeffVer), getB_Roadcoeff("1", roadSurface, coeffVer), parameters.getSpeedLv(), 70.); - medRoadLvl = medRoadLvl + getNoiseLvl(getA_Roadcoeff(freqParam, "2", parameters.getRoadSurface(), coeffVer), getB_Roadcoeff("2", roadSurface, coeffVer), parameters.getSpeedMv(), 70.); - hgvRoadLvl = hgvRoadLvl + getNoiseLvl(getA_Roadcoeff(freqParam, "3", parameters.getRoadSurface(), coeffVer), getB_Roadcoeff("3", roadSurface, coeffVer), parameters.getSpeedHgv(), 70.); - - // Correction road on propulsion noise - Eq. 2.2.20 - lvMotorLvl = lvMotorLvl + Math.min(getA_Roadcoeff(freqParam, "1", roadSurface, coeffVer), 0.); - medMotorLvl = medMotorLvl + Math.min(getA_Roadcoeff(freqParam, "2", roadSurface, coeffVer), 0.); - hgvMotorLvl = hgvMotorLvl + Math.min(getA_Roadcoeff(freqParam, "3", roadSurface, coeffVer), 0.); - wheelaMotorLvl = wheelaMotorLvl + Math.min(getA_Roadcoeff(freqParam, "4a", roadSurface, coeffVer), 0.); - wheelbMotorLvl = wheelbMotorLvl + Math.min(getA_Roadcoeff(freqParam, "4b", roadSurface, coeffVer), 0.); - - /** - * Combine Propulsion and Rolling Noise - Eq. 2.2.2 - */ - final double lvCompound = sumDbValues(lvRoadLvl, lvMotorLvl); - final double medCompound = sumDbValues(medRoadLvl, medMotorLvl); - final double hgvCompound = sumDbValues(hgvRoadLvl, hgvMotorLvl); - final double wheelaCompound = wheelaMotorLvl; // Eq. 2.2.3 - final double wheelbCompound = wheelbMotorLvl; // Eq. 2.2.3 - - /** - * Compute Noise Level from flow_rate and speed - Eq 2.2.1 - */ - double lvLvl = Vperhour2NoiseLevel(lvCompound, parameters.getLvPerHour(), parameters.getSpeedLv()); - double medLvl = Vperhour2NoiseLevel(medCompound, parameters.getMvPerHour(), parameters.getSpeedMv()) ; - double hgvLvl = Vperhour2NoiseLevel(hgvCompound, parameters.getHgvPerHour(), parameters.getSpeedHgv()); - double wheelaLvl = Vperhour2NoiseLevel(wheelaCompound, parameters.getWavPerHour(), parameters.getSpeedWav()); - double wheelbLvl = Vperhour2NoiseLevel(wheelbCompound, parameters.getWbvPerHour(), parameters.getSpeedWbv()); - - // In the case of a bi-directional traffic flow, it is necessary to split the flow into two components and correct half for uphill and half for downhill. - if (twoWay && parameters.getSlopePercentage() != 0) - { - lvRoadLvl = lvRoadLvl - getDeltaSlope(parameters,"1",sign)+ getDeltaSlope(parameters,"1",-sign); - medRoadLvl = medRoadLvl - getDeltaSlope(parameters,"2",sign)+ getDeltaSlope(parameters,"2",-sign); - hgvRoadLvl = hgvRoadLvl - getDeltaSlope(parameters,"3",sign)+ getDeltaSlope(parameters,"3",-sign); - double lvCompound_InverseSlope = sumDbValues(lvRoadLvl, lvMotorLvl); - double medCompound_InverseSlope = sumDbValues(medRoadLvl, medMotorLvl); - double hgvCompound_InverseSlope = sumDbValues(hgvRoadLvl, hgvMotorLvl); - - lvLvl = sumDbValues(Vperhour2NoiseLevel(lvCompound, parameters.getLvPerHour()/2, parameters.getSpeedLv()),Vperhour2NoiseLevel(lvCompound_InverseSlope, parameters.getLvPerHour()/2, parameters.getSpeedLv())); - medLvl = sumDbValues(Vperhour2NoiseLevel(medCompound, parameters.getMvPerHour()/2, parameters.getSpeedMv()),Vperhour2NoiseLevel(medCompound_InverseSlope, parameters.getMvPerHour()/2, parameters.getSpeedMv())); - hgvLvl = sumDbValues(Vperhour2NoiseLevel(hgvCompound, parameters.getHgvPerHour()/2, parameters.getSpeedHgv()),Vperhour2NoiseLevel(hgvCompound_InverseSlope, parameters.getHgvPerHour()/2, parameters.getSpeedHgv())); - } - - - return sumDb5(lvLvl, medLvl, hgvLvl, wheelaLvl, wheelbLvl); - } -} \ No newline at end of file diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/EvaluateRoadSourceDynamic.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/EvaluateRoadSourceDynamic.java deleted file mode 100644 index 630aca847..000000000 --- a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/EvaluateRoadSourceDynamic.java +++ /dev/null @@ -1,355 +0,0 @@ -/** - * NoiseModelling is an open-source tool designed to produce environmental noise maps on very large urban areas. It can be used as a Java library or be controlled through a user friendly web interface. - * - * This version is developed by the DECIDE team from the Lab-STICC (CNRS) and by the Mixt Research Unit in Environmental Acoustics (Université Gustave Eiffel). - * - * - * NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. - * - * Contact: contact@noise-planet.org - * - */ - -package org.noise_planet.noisemodelling.emission; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.NullNode; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Random; - -import static org.noise_planet.noisemodelling.emission.Utils.dbToW; -import static org.noise_planet.noisemodelling.emission.Utils.wToDb; - -/** - * Return the dB value corresponding to the parameters - * Reference document is Common Noise Assessment Methods in Europe(CNOSSOS-EU), 2012 - * Stylianos Kephalopoulos, Marco Paviotti, Fabienne Anfosso-Ledee - * https://ec.europa.eu/jrc/sites/jrcsh/files/cnossos-eu%2520jrc%2520reference%2520report_final_on%2520line%2520version_10%2520august%25202012.pdf - * @author Nicolas Fortin - * @author Pierre Aumond - 27/04/2017 - 21/08/2018 - * @author Arnaud Can - 27/02/2018 - 21/08/2018 - */ - -public class EvaluateRoadSourceDynamic { - - private static JsonNode cnossosData = parse(EvaluateRoadSourceCnossos.class.getResourceAsStream("coefficients_Road_Cnossos_2015.json")); - private static JsonNode cnossosData2019 = parse(EvaluateRoadSourceCnossos.class.getResourceAsStream("coefficients_Road_Cnossos_2020.json")); - - private static JsonNode parse(InputStream inputStream) { - try { - ObjectMapper mapper = new ObjectMapper(); - return mapper.readTree(inputStream); - } catch (IOException ex) { - return NullNode.getInstance(); - } - } - - public static JsonNode getCnossosData(int coeffVer){ - if (coeffVer==1){ - return cnossosData; - } - else { - return cnossosData2019; - } - } - - /** Get a Road Coeff by Freq **/ - public static Double getA_Roadcoeff(int Freq, String vehCat, String RoadSurface, int coeffVer) { //CNOSSOS-EU_Road_Catalogue_Final - 01April2014.xlsx - https://circabc.europa.eu/webdav/CircaBC/env/noisedir/Library/Public/cnossos-eu/Final_methods%26software - int Freq_ind; - int VehCat_ind; - double out_value; - switch (Freq) { - case 63: - Freq_ind=0; - break; - case 125: - Freq_ind=1; - break; - case 250: - Freq_ind=2; - break; - case 500: - Freq_ind=3; - break; - case 1000: - Freq_ind=4; - break; - case 2000: - Freq_ind=5; - break; - case 4000: - Freq_ind=6; - break; - case 8000: - Freq_ind=7; - break; - default: - Freq_ind=0; - } - return getCnossosData(coeffVer).get("roads").get(RoadSurface).get("ref").get(vehCat).get("spectrum").get(Freq_ind).doubleValue(); - } - - /** Get b Road Coeff by Freq **/ - public static Double getB_Roadcoeff(String vehCat, String roadSurface, int coeffVer) { //CNOSSOS-EU_Road_Catalogue_Final - 01April2014.xlsx - https://circabc.europa.eu/webdav/CircaBC/env/noisedir/Library/Public/cnossos-eu/Final_methods%26software - return getCnossosData(coeffVer).get("roads").get(roadSurface).get("ref").get(vehCat).get("ßm").doubleValue(); - } - - public static double getCr(String vehCat, int k, int coeffVer) { - return getCnossosData(coeffVer).get("vehicles").get(vehCat).get(k == 1 ? "crossing" : "roundabout").get("cr").doubleValue(); - } - - public static double getCp(String vehCat, int k, int coeffVer) { - return getCnossosData(coeffVer).get("vehicles").get(vehCat).get(k == 1 ? "crossing" : "roundabout").get("cp").doubleValue(); - } - - /** - * Vehicle emission values coefficients - * @param coeff ar,br,ap,bp,a,b - * @param freq 0 = 63 Hz, 1 = 125 Hz, etc. - * @param vehicleCategory 1,2,3,4a,4b.. - * @return - */ - public static Double getCoeff(String coeff, int freq, String vehicleCategory, int coeffVer) { - int Freq_ind; - switch (freq) { - case 63: - Freq_ind=0; - break; - case 125: - Freq_ind=1; - break; - case 250: - Freq_ind=2; - break; - case 500: - Freq_ind=3; - break; - case 1000: - Freq_ind=4; - break; - case 2000: - Freq_ind=5; - break; - case 4000: - Freq_ind=6; - break; - case 8000: - Freq_ind=7; - break; - default: - Freq_ind=0; - } - return getCnossosData(coeffVer).get("vehicles").get(vehicleCategory).get(coeff).get(Freq_ind).doubleValue(); - } - - /** get noise level from speed **/ - private static Double getNoiseLvl(Double base, Double adj, Double speed, - Double speedBase) { - return base + adj * Math.log10(speed / speedBase); - } - - - /** get sum dBa **/ - private static Double sumDba(Double dBA1, Double dBA2) { - return wToDb(dbToW(dBA1) + dbToW(dBA2)); - } - - private static Double sumDba_5(Double dBA1, Double dBA2, Double dBA3, Double dBA4, Double dBA5) { - return wToDb(dbToW(dBA1) + dbToW(dBA2) + dbToW(dBA3) + dbToW(dBA4) + dbToW(dBA5)); - } - - /** - * Road noise evaluation. - * @param parameters Noise emission parameters - * @return Noise level in dB - */ - public static double evaluate(RoadSourceParametersDynamic parameters) { - final double Compound; - final boolean Stud = parameters.getStud(); - final double Junc_dist = parameters.getJunc_dist(); - final int Junc_type = parameters.getJunc_type(); - final int acc_type = parameters.getAcc_type(); - final String veh_type = parameters.getVeh_type(); - final int VehId = parameters.getVehId(); - final double acceleration = parameters.getAcceleration(); - double speed = parameters.getSpeed(); - - final int freqParam = parameters.getFreqParam(); - final double Temperature = parameters.getTemperature(); - final String roadSurface = parameters.getRoadSurface(); - final int coeffVer = parameters.getCoeffVer(); - - // /////////////////////// - // Noise road/tire CNOSSOS - double RoadLvl; // Lw/m (1 veh/h) - - // Noise level - // Noise level - RoadLvl = getNoiseLvl(getCoeff("ap", freqParam , veh_type ,coeffVer), getCoeff("bp", freqParam , veh_type ,coeffVer), speed, 70.); - - // Correction by temperature p. 36 - switch (veh_type) { - case "1": - RoadLvl = RoadLvl + 0.08 * (20 - Temperature); // K = 0.08 p. 36 - break; - case "2": - case "3": - RoadLvl = RoadLvl + 0.04 * (20 - Temperature); // K = 0.04 p. 36 - break; - default: - break; - } - - - // Rolling noise acceleration correction - double coefficientJunctionDistance = Math.max(1 - Math.abs(Junc_dist) / 100, 0); - RoadLvl = RoadLvl + getCr(veh_type, Junc_type,coeffVer) * coefficientJunctionDistance; - - - //Studied tyres - if (veh_type.equals("1")) { // because studded tyres are only on Cat 1 vehicle - if (Stud) { - double speedStud = (speed >= 90) ? 90 : speed; - speedStud = (speedStud <= 50) ? 50 : speedStud; - double deltaStud = getNoiseLvl(getCoeff( "a" , freqParam , veh_type ,coeffVer), getCoeff("b", freqParam , veh_type ,coeffVer), speedStud, 70.); - RoadLvl = RoadLvl + Math.pow(10, deltaStud / 10); - } - } - - //Road surface correction on rolling noise - RoadLvl = RoadLvl +getNoiseLvl(getA_Roadcoeff(freqParam,veh_type, roadSurface,coeffVer), getB_Roadcoeff(veh_type,roadSurface,coeffVer), speed, 70.); - - - // /////////////////////// - // Noise motor - // Calculate the emission powers of motors lights vehicles and heavies goods vehicles. - double MotorLvl; - RoadLvl = (speed <= 20) ? 0 : RoadLvl; - speed = (speed <= 20) ? 20 : speed; // Because when vehicles are stopped they still emit motor sounds. - // default or steady speed. - MotorLvl =getCoeff("ap", freqParam , veh_type ,coeffVer ) + getCoeff("bp", freqParam , veh_type ,coeffVer ) * (speed-70)/70 ; - - // Propulsion noise acceleration correction - - - // Propulsion noise acceleration correction - double aMax; - switch (acc_type) { - case 1: - if (veh_type.equals("1") || veh_type.equals("2") || veh_type.equals("3") ) { - MotorLvl = MotorLvl + getCp(veh_type, Junc_type,coeffVer) * coefficientJunctionDistance; - } - break; - case 2: - switch (veh_type) { - case "1": - aMax = 2; - if (acceleration >= -1 & freqParam < 250 ){ MotorLvl = MotorLvl + Math.min(acceleration,aMax) * 5.0;} - if (acceleration >= -1 & freqParam >= 250 ){ MotorLvl = MotorLvl + Math.min(acceleration,aMax) * 2.0;} - if (acceleration < -1 & freqParam < 250 ){ MotorLvl = MotorLvl + -1 * 5.0;} - if (acceleration < -1 & freqParam >= 250 ){ MotorLvl = MotorLvl + -1 * 2.0;} - break; - case "2": - case "3": - aMax = 1; - if (acceleration >= -1 & freqParam < 250 ){ MotorLvl = MotorLvl + Math.min(acceleration,aMax) * 7.0;} - if (acceleration >= -1 & freqParam >= 250 ){ MotorLvl = MotorLvl + Math.min(acceleration,aMax) * 3.0;} - if (acceleration < -1 & freqParam < 250 ){ MotorLvl = MotorLvl + -1 * 7.0;} - if (acceleration < -1 & freqParam >= 250 ){ MotorLvl = MotorLvl + -1 * 3.0;} - break; - case "4a": - case "4b": - aMax = 4; - if (acceleration >= -1 & freqParam < 250 ){ MotorLvl = MotorLvl + Math.min(acceleration,aMax) * 5.0;} - if (acceleration >= -1 & freqParam >= 250 ){ MotorLvl = MotorLvl + Math.min(acceleration,aMax) * 2.0;} - if (acceleration < -1 & freqParam < 250 ){ MotorLvl = MotorLvl + -1 * 5.0;} - if (acceleration < -1 & freqParam >= 250 ){ MotorLvl = MotorLvl + -1 * 2.0;} - break; - default: - break; - } - break; - case 3: - switch (veh_type) { - case "1": - case "4a": - case "4b": - aMax = 10; - if (acceleration >= -1 & freqParam < 250 ){ MotorLvl = MotorLvl + Math.min(acceleration,aMax) * 5.0;} - if (acceleration >= -1 & freqParam >= 250 ){ MotorLvl = MotorLvl + Math.min(acceleration,aMax) * 2.0;} - if (acceleration < -1 & freqParam < 250 ){ MotorLvl = MotorLvl + -1 * 5.0;} - if (acceleration < -1 & freqParam >= 250 ){ MotorLvl = MotorLvl + -1 * 2.0;} - break; - case "2": - case "3": - aMax = 10; - if (acceleration >= -1 & freqParam < 250 ){ MotorLvl = MotorLvl + Math.min(acceleration,aMax) * 7.0;} - if (acceleration >= -1 & freqParam >= 250 ){ MotorLvl = MotorLvl + Math.min(acceleration,aMax) * 3.0;} - if (acceleration < -1 & freqParam < 250 ){ MotorLvl = MotorLvl + -1 * 7.0;} - if (acceleration < -1 & freqParam >= 250 ){ MotorLvl = MotorLvl + -1 * 3.0;} - break; - default: - break; - } - break; - default: - break; - } - - - // Correction gradient - switch (veh_type) { - case "1": - if (parameters.getSlopePercentage() < -6) { - // downwards 2% <= p <= 6% - // Steady and deceleration, the same formulae - MotorLvl = MotorLvl + (Math.min(12, -parameters.getSlopePercentage()) - 6) / 1; - } else if (parameters.getSlopePercentage() <= 2) { - // 0% <= p <= 2% - MotorLvl = MotorLvl + 0.; - } else { - // upwards 2% <= p <= 6% - MotorLvl = MotorLvl + ((speed / 100) * ((Math.min(12, parameters.getSlopePercentage()) - 2) / 1.5)); - } - break; - case "2": - if (parameters.getSlopePercentage() < -4) { - // Steady and deceleration, the same formulae - MotorLvl = MotorLvl + ((speed - 20) / 100) * (Math.min(12, -1 * parameters.getSlopePercentage()) - 4) / 0.7; - } else if (parameters.getSlopePercentage() <= 0) { - MotorLvl = MotorLvl + 0.; - - } else { - MotorLvl = MotorLvl + (speed / 100) * (Math.min(12, parameters.getSlopePercentage())) / 1; - } - break; - case "3": - if (parameters.getSlopePercentage() < -4) { - // Steady and deceleration, the same formulae - MotorLvl = MotorLvl + ((speed - 10) / 100) * (Math.min(12, -1 * parameters.getSlopePercentage()) - 4) / 0.5; - } else if (parameters.getSlopePercentage() <= 0) { - MotorLvl = MotorLvl + 0.; - } else { - MotorLvl = MotorLvl + (speed / 100) * (Math.min(12, parameters.getSlopePercentage())) / 0.8; - } - break; - default: - break; - } - - - // Correction road on propulsion noise - MotorLvl = MotorLvl+ Math.min(getA_Roadcoeff(freqParam ,veh_type,roadSurface,coeffVer), 0.); - - Random r = new Random(VehId); - double deltaLwdistrib = 0.115*Math.pow(parameters.getLwStd(),2.0); // Gozalo, G. R., Aumond, P., & Can, A. (2020). Variability in sound power levels: Implications for static and dynamic traffic models. Transportation Research Part D: Transport and Environment, 84, 102339. - - Compound = sumDba(RoadLvl, MotorLvl) - deltaLwdistrib + r.nextGaussian()*parameters.getLwStd(); - - return Compound; - } - - -} diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/LineSource.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/LineSource.java new file mode 100644 index 000000000..4b31b91b7 --- /dev/null +++ b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/LineSource.java @@ -0,0 +1,87 @@ +/** + * NoiseModelling is a library capable of producing noise maps. It can be freely used either for research and education, as well as by experts in a professional use. + *

+ * NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. + *

+ * Official webpage : http://noise-planet.org/noisemodelling.html + * Contact: contact@noise-planet.org + */ + +package org.noise_planet.noisemodelling.emission; + +/** + * Line Source Class + * A point source is define by its spectrum, height, directivity and type (optional) + * + * @author Pierre Aumond, Université Gustave Eiffel + */ + + +public class LineSource { + + private double[] lW ; // spectrum of the line source in dB/m + public String typeSource = ""; // Optional, this type can help to select a directivity pattern + public double sourceHeight ; // height of the source in meters + public String directivity = ""; // directivity pattern + + + public String getTypeSource() { + return typeSource; + } + + public void setTypeSource(String typeSource) { + this.typeSource = typeSource; + } + + public double getSourceHeight() { + return sourceHeight; + } + + public void setSourceHeight(double sourceHeight) { + this.sourceHeight = sourceHeight; + } + + public String getDirectivity() { + return directivity; + } + + public void setDirectivity(String directivity) { + this.directivity = directivity; + } + + public double[] getlW() { + return lW; + } + + public void setlW(double[] lW) { + this.lW = lW; + } + + + private void setLW(double[] lW) { + } + + + public LineSource(double[] lW, double sourceHeight, String typeSource, String directivity) { + this.lW = lW; + this.sourceHeight = sourceHeight; + this.typeSource = typeSource; + this.directivity = directivity; + } + + public LineSource(double[] lW, double sourceHeight, String typeSource) { + this.lW = lW; + this.sourceHeight = sourceHeight; + this.typeSource = typeSource; + } + + public LineSource(double sourceHeight, String typeSource) { + this.sourceHeight = sourceHeight; + this.typeSource = typeSource; + } + + public LineSource(String typeSource) { + this.typeSource = typeSource; + } + +} diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/PointSource.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/PointSource.java new file mode 100644 index 000000000..848c9e929 --- /dev/null +++ b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/PointSource.java @@ -0,0 +1,78 @@ +/** + * NoiseModelling is a library capable of producing noise maps. It can be freely used either for research and education, as well as by experts in a professional use. + *

+ * NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. + *

+ * Official webpage : http://noise-planet.org/noisemodelling.html + * Contact: contact@noise-planet.org + */ + +package org.noise_planet.noisemodelling.emission; + +/** + * Point Source Class + * A point source is define by its spectrum, height, directivity and type (optional) + * + * @author Pierre Aumond, Université Gustave Eiffel + */ + +public class PointSource { + + private double[] lW ; // spectrum of the point source in dB + public String typeSource = ""; // Optional, this type can help to select a directivity pattern + public double sourceHeight ; // height of the source in meters + public String directivity = ""; // directivity pattern + + public String getTypeSource() { + return typeSource; + } + + public void setTypeSource(String typeSource) { + this.typeSource = typeSource; + } + + public double getSourceHeight() { + return sourceHeight; + } + + public void setSourceHeight(double sourceHeight) { + this.sourceHeight = sourceHeight; + } + + public String getDirectivity() { + return directivity; + } + + public void setDirectivity(String directivity) { + this.directivity = directivity; + } + + public double[] getlW() { + return lW; + } + + public void setlW(double[] lW) { + this.lW = lW; + } + + private void setLW(double[] lW) { + } + + public PointSource(double[] lW, double sourceHeight, String typeSource, String directivity) { + this.lW = lW; + this.sourceHeight = sourceHeight; + this.typeSource = typeSource; + this.directivity = directivity; + } + + public PointSource(double[] lW, double sourceHeight, String typeSource) { + this.lW = lW; + this.sourceHeight = sourceHeight; + this.typeSource = typeSource; + } + + public PointSource(String typeSource) { + this.typeSource = typeSource; + } + +} diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/RoadSourceParametersDynamic.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/RoadSourceParametersDynamic.java deleted file mode 100644 index 161cb63b8..000000000 --- a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/RoadSourceParametersDynamic.java +++ /dev/null @@ -1,256 +0,0 @@ -/** - * NoiseModelling is an open-source tool designed to produce environmental noise maps on very large urban areas. It can be used as a Java library or be controlled through a user friendly web interface. - * - * This version is developed by the DECIDE team from the Lab-STICC (CNRS) and by the Mixt Research Unit in Environmental Acoustics (Université Gustave Eiffel). - * - * - * NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. - * - * Contact: contact@noise-planet.org - * - */ - -package org.noise_planet.noisemodelling.emission; - -/** - * @author Nicolas Fortin - * @author Pierre Aumond - 03/05/2017 - 21/08/2018 - * @author Arnaud Can - 27/02/2018 - 21/08/2018 - */ - -public class RoadSourceParametersDynamic { - private final double speed; - private final double acceleration; - private final String veh_type; - private final int acc_type; - private final int FreqParam; - private final double Temperature; - private final String roadSurface; - private final boolean Stud ; - private final double Junc_dist; - private final int Junc_type; - private final double LwStd; - private final int VehId; - - private int coeffVer = 2; - - - private int surfaceAge; - private double slopePercentage; - - public void setCoeffVer(int coeffVer) { - this.coeffVer = coeffVer; - } - - public int getCoeffVer() { - return this.coeffVer; - } - - - private static double getVPl(double sLv, double speedmax, int type, int subtype) throws IllegalArgumentException { - switch (type) { - case 1: - return Math.min(sLv, 100); // Highway 2x2 130 km/h - case 2: - switch (subtype) { - case 1: - return Math.min(sLv, 90); // 2x2 way 110 km/h - case 2: - return Math.min(sLv, 90); // 2x2 way 90km/h off belt-way - case 3: - if (speedmax < 80) { - return Math.min(sLv, 70); - } // Belt-way 70 km/h - else { - return Math.min(sLv, 85); - } // Belt-way 90 km/h - } - break; - case 3: - switch (subtype) { - case 1: - return sLv; // Interchange ramp - case 2: - return sLv; // Off boulevard roundabout circular junction - case 7: - return sLv; // inside-boulevard roundabout circular junction - } - break; - case 4: - switch (subtype) { - case 1: - return Math.min(sLv, 90); // lower level 2x1 way 7m 90km/h - case 2: - return Math.min(sLv, 90); // Standard 2x1 way 90km/h - case 3: - if (speedmax < 70) { - return Math.min(sLv, 60); - } // 2x1 way 60 km/h - else { - return Math.min(sLv, 80); - } // 2x1 way 80 km/h - } - break; - case 5: - switch (subtype) { - case 1: - return Math.min(sLv, 70); // extra boulevard 70km/h - case 2: - return Math.min(sLv, 50); // extra boulevard 50km/h - case 3: - return Math.min(sLv, 50); // extra boulevard Street 50km/h - case 4: - return Math.min(sLv, 50); // extra boulevard Street <50km/h - case 6: - return Math.min(sLv, 50); // in boulevard 70km/h - case 7: - return Math.min(sLv, 50); // in boulevard 50km/h - case 8: - return Math.min(sLv, 50); // in boulevard Street 50km/h - case 9: - return Math.min(sLv, 50); // in boulevard Street <50km/h - } - break; - case 6: - switch (subtype) { - case 1: - return Math.min(sLv, 50); // Bus-way boulevard 70km/h - case 2: - return Math.min(sLv, 50); // Bus-way boulevard 50km/h - case 3: - return Math.min(sLv, 50); // Bus-way extra boulevard Street - // 50km/h - case 4: - return Math.min(sLv, 50); // Bus-way extra boulevard Street - // <50km/h - case 8: - return Math.min(sLv, 50); // Bus-way in boulevard Street 50km/h - case 9: - return Math.min(sLv, 50); // Bus-way in boulevard Street <50km/h - } - break; - } - throw new IllegalArgumentException("Unknown road type, please check (type=" - + type + ",subtype=" + subtype + ")."); - } - - - - /** - * @param slopePercentage Gradient percentage of road from -6 % to 6 % - */ - public void setSlopePercentage(double slopePercentage) { - this.slopePercentage = Math.min(6., Math.max(-6., slopePercentage)); - } - - /** - * @param slopePercentage Gradient percentage of road from -6 % to 6 % - */ - public void setSlopePercentage_without_limit(double slopePercentage) { - this.slopePercentage = slopePercentage; - } - - /** - * Compute the slope - * @param beginZ Z start - * @param endZ Z end - * @param road_length_2d Road length (projected to Z axis) - * @return Slope percentage - */ - public static double computeSlope(double beginZ, double endZ, double road_length_2d) { - return (endZ - beginZ) / road_length_2d * 100.; - } - - /** - * @param surfaceAge Road surface age in years, from 1 to 10 years. - */ - public void setSurfaceAge(int surfaceAge) { - this.surfaceAge = Math.max(1, Math.min(10, surfaceAge)); - } - - /** - * @return Road surface age - */ - public int getSurfaceAge() { - return surfaceAge; - } - - /** - * Simplest road noise evaluation - * @param speed Vehicle speed - * @param acceleration Vehicle acceleration - * @param veh_type Vehicle type (CNOSSOS categories) - * @param acc_type Acceleration mode (1 = Distance to Junction (CNOSSOS), 2= Correction from IMAGINE with bounds , 3 = Correction from IMAGINE without bounds) - * @param FreqParam Studied Frequency - * @param Temperature Temperature(Celsius) - * @param roadSurface Road surface between 0 and 14 - * @param Stud True = equipped with studded tyres - * @param Junc_dist Distance to junction - * @param Junc_type Type of junction ((k = 1 for a crossing with traffic lights ; k = 2 for a roundabout) - * @param LwStd Standard Deviation of Lw - * @param VehId Vehicle ID used as a seed for LwStd - */ - public RoadSourceParametersDynamic(double speed, double acceleration, String veh_type, int acc_type, int FreqParam, double Temperature, String roadSurface, boolean Stud, double Junc_dist, int Junc_type, double LwStd, int VehId) { - - if (Junc_type <0 || Junc_type>2 ) throw new IllegalArgumentException("Unlnown Junction type for a section."); - this.speed = speed; - this.acceleration = acceleration; - this.veh_type = veh_type; - this.acc_type = acc_type; - this.FreqParam = Math.max(0, FreqParam); - this.Temperature = Temperature; - this.roadSurface = roadSurface; - this.Stud = Stud; - this.Junc_dist = Math.max(0, Junc_dist); - this.Junc_type = Math.max(0, Math.min(2, Junc_type)); - this.LwStd = LwStd; - this.VehId = VehId; - - - } - - public double getLwStd() { - return LwStd; - } - - public int getVehId() { - return VehId; - } - - public double getSlopePercentage() { - return slopePercentage; - } - - public double getSpeed() { - return speed; - } - - public int getFreqParam() { - return FreqParam; - } - - public int getAcc_type() { - return acc_type; - } - - public String getVeh_type() { - return veh_type; - } - - public double getAcceleration() { - return acceleration; - } - - public double getTemperature() { return Temperature;} - - public String getRoadSurface() {return roadSurface;} - - public boolean getStud() {return Stud;} - - - public double getJunc_dist() {return Junc_dist;} - - public int getJunc_type() {return Junc_type;} - -} - diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/directivity/DirectivitySphere.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/directivity/DirectivitySphere.java new file mode 100644 index 000000000..dcf46bf19 --- /dev/null +++ b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/directivity/DirectivitySphere.java @@ -0,0 +1,36 @@ +/** + * NoiseModelling is a library capable of producing noise maps. It can be freely used either for research and education, as well as by experts in a professional use. + *

+ * NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. + *

+ * Official webpage : http://noise-planet.org/noisemodelling.html + * Contact: contact@noise-planet.org + */ + +package org.noise_planet.noisemodelling.emission.directivity; + +/** + * Interface that returns the attenuation in dB due to a specific directivity pattern. + * @author Nicolas Fortin, Université Gustave Eiffel + */ + +public interface DirectivitySphere { + + /** + * Returns the attenuation in dB due to a particular frequency of the directivity pattern at a given angle (phi, theta) + * @param frequency Frequency in Hertz + * @param phi (0 2π) with 0 is front + * @param theta (-π/2 π/2) with 0 is horizontal; π is top + * @return Attenuation in dB + */ + double getAttenuation(double frequency, double phi, double theta); + + /** + * Returns the attenuation in dB of the directivity pattern at a given angle (phi, theta). + * @param frequencies Frequency array in Hertz (same order will be returned) + * @param phi (0 2π) 0 is front + * @param theta (-π/2 π/2) 0 is horizontal π is top + * @return Attenuation in dB for each frequency + */ + double[] getAttenuationArray(double[] frequencies, double phi, double theta); +} diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/DiscreteDirectionAttributes.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/directivity/DiscreteDirectivitySphere.java similarity index 68% rename from noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/DiscreteDirectionAttributes.java rename to noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/directivity/DiscreteDirectivitySphere.java index 7af96227a..b65fb1daf 100644 --- a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/DiscreteDirectionAttributes.java +++ b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/directivity/DiscreteDirectivitySphere.java @@ -1,69 +1,112 @@ /** - * NoiseModelling is an open-source tool designed to produce environmental noise maps on very large urban areas. It can be used as a Java library or be controlled through a user friendly web interface. - * - * This version is developed by the DECIDE team from the Lab-STICC (CNRS) and by the Mixt Research Unit in Environmental Acoustics (Université Gustave Eiffel). - * - * + * NoiseModelling is a library capable of producing noise maps. It can be freely used either for research and education, as well as by experts in a professional use. + *

* NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. - * + *

+ * Official webpage : http://noise-planet.org/noisemodelling.html * Contact: contact@noise-planet.org - * */ -package org.noise_planet.noisemodelling.emission; + +package org.noise_planet.noisemodelling.emission.directivity; + +import org.noise_planet.noisemodelling.emission.utils.Utils; import java.io.Serializable; import java.util.*; /** * Describe Attenuation directivity over a sphere - * Values between specified angles are interpolated following a method (linear by default) + * Values between specified angles are interpolated following an interpolation method (linear=1 by default or closest neighbor=0) + * @author Nicolas Fortin, Université Gustave Eiffel */ -public class DiscreteDirectionAttributes implements DirectionAttributes { - int interpolationMethod = 1; - int directionIdentifier; - double[] frequencies; + +public class DiscreteDirectivitySphere implements DirectivitySphere { + + int interpolationMethod = 1; //interpolation method between specified angles : 0 for closest neighbor, 1 for Bilinear interpolation + int directionIdentifier; // primary key of the directional sphere (a table with various directional sphere can be given by the user) + double[] frequencies; // array of frequencies (Hz) Map frequencyMapping = new HashMap<>(); // List of records, maintain the two lists sorted + // A DirectivityRecord is the attenuation value for a specific angle (theta, phi) - a point of the directivity sphere List recordsTheta = new ArrayList<>(); List recordsPhi = new ArrayList<>(); ThetaComparator thetaComparator = new ThetaComparator(); PhiComparator phiComparator = new PhiComparator(); - public DiscreteDirectionAttributes(int directionIdentifier, double[] frequencies) { + /** + * DiscreteDirectivitySphere defines the discrete directional sphere + * @param directionIdentifier primary key of the directional sphere (a table with various directional sphere can be given by the user) + * @param frequencies array of frequencies (Hz) + */ + public DiscreteDirectivitySphere(int directionIdentifier, double[] frequencies) { this.directionIdentifier = directionIdentifier; this.frequencies = frequencies; - for(int idFrequency = 0; idFrequency < frequencies.length; idFrequency++) { + for (int idFrequency = 0; idFrequency < frequencies.length; idFrequency++) { frequencyMapping.put(Double.doubleToLongBits(frequencies[idFrequency]), idFrequency); } } + /** + * Get distance in spherical coordinates between a point on the sphere define by its specific angle (theta, phi) and a point of the directivity sphere (DirectivityRecord) + * @param theta (-π/2 π/2) 0 is horizontal; π is top + * @param phi (0 2π) 0 is front + * @param b DirectivityRecord - point of the directivity sphere + * @return distance + */ + private static double getDistance(double theta, double phi, DirectivityRecord b) { + return Math.acos(Math.sin(phi) * Math.sin(b.phi) + Math.cos(phi) * Math.cos(b.phi) * Math.cos(theta - b.theta)); + } + + /** + * Set the interpolation method + * @param interpolationMethod interpolation method between specified angles : 0 for closest neighbor, 1 for Bilinear interpolation + */ public void setInterpolationMethod(int interpolationMethod) { this.interpolationMethod = interpolationMethod; } + /** + * Get the directivity values for a given Theta angle + * @return List of the records + */ public List getRecordsTheta() { return recordsTheta; } + /** + * Get the directivity records for a given Phi angle + * @return List of the records + */ public List getRecordsPhi() { return recordsPhi; } + /** + * Get the primary key of the directional sphere (a table with various directional sphere can be given by the user) + * @return integer and primary key + */ public int getDirectionIdentifier() { return directionIdentifier; } + /** + * Returns the attenuation in dB for a particular frequency of the directivity pattern for a certain angle (phi, theta) + * @param frequency Frequency in Hertz + * @param phi (0 2π) with 0 is front + * @param theta (-π/2 π/2) with 0 is horizontal; π is top + * @return Attenuation level in dB + */ @Override public double getAttenuation(double frequency, double phi, double theta) { DirectivityRecord query = new DirectivityRecord(theta, phi, null); // look for frequency index Integer idFreq = frequencyMapping.get(Double.doubleToLongBits(frequency)); - if(idFreq == null) { + if (idFreq == null) { // get closest index idFreq = Arrays.binarySearch(frequencies, frequency); - if(idFreq < 0) { + if (idFreq < 0) { int last = Math.min(-idFreq - 1, frequencies.length - 1); int first = Math.max(last - 1, 0); idFreq = Math.abs(frequencies[first] - frequency) < Math.abs(frequencies[last] - frequency) ? @@ -73,6 +116,13 @@ public double getAttenuation(double frequency, double phi, double theta) { return getRecord(query.theta, query.phi, interpolationMethod).getAttenuation()[idFreq]; } + /** + * Returns the attenuation in dB of the directivity pattern at a given angle (phi, theta) + * @param frequencies Frequency array in Hertz (same order will be returned) + * @param phi (0 2π) with 0 is front + * @param theta (-π/2 π/2) with 0 is horizontal; π is top + * @return Attenuation array level in dB + */ @Override public double[] getAttenuationArray(double[] frequencies, double phi, double theta) { DirectivityRecord query = new DirectivityRecord(theta, phi, null); @@ -81,7 +131,7 @@ public double[] getAttenuationArray(double[] frequencies, double phi, double the double[] returnAttenuation = new double[frequencies.length]; - for(int frequencyIndex = 0; frequencyIndex < frequencies.length; frequencyIndex++) { + for (int frequencyIndex = 0; frequencyIndex < frequencies.length; frequencyIndex++) { double frequency = frequencies[frequencyIndex]; // look for frequency index Integer idFreq = frequencyMapping.get(Double.doubleToLongBits(frequency)); @@ -101,23 +151,23 @@ public double[] getAttenuationArray(double[] frequencies, double phi, double the } /** - * Add angle attenuation record - * @param theta (-π/2 π/2) 0 is horizontal π is top + * Add angle attenuation record for the directivity sphere + * @param theta (-π/2 π/2) 0 is horizontal; π is top * @param phi (0 2π) 0 is front * @param attenuation Attenuation in dB */ public void addDirectivityRecord(double theta, double phi, double[] attenuation) { DirectivityRecord record = new DirectivityRecord(theta, phi, attenuation); int index = Collections.binarySearch(recordsTheta, record, thetaComparator); - if(index >= 0) { + if (index >= 0) { // This record already exists return; } else { - index = - index - 1; + index = -index - 1; } recordsTheta.add(index, record); index = Collections.binarySearch(recordsPhi, record, phiComparator); - index = - index - 1; + index = -index - 1; recordsPhi.add(index, record); } @@ -128,11 +178,8 @@ public double[] getFrequencies() { return frequencies; } - private static double getDistance(double theta, double phi, DirectivityRecord b) { - return Math.acos(Math.sin(phi) * Math.sin(b.phi) + Math.cos(phi) * Math.cos(b.phi) * Math.cos(theta - b.theta)); - } /** - * Retrieve DirectivityRecord for the specified angles + * Retrieve DirectivityRecord for the specified angle (theta, phi) * @param theta in radians * @param phi in radians * @param interpolate 0 for closest neighbor, 1 for Bilinear interpolation @@ -144,23 +191,23 @@ public DirectivityRecord getRecord(double theta, double phi, int interpolate) { DirectivityRecord[] allRecords = null; DirectivityRecord record = new DirectivityRecord(theta, phi, null); int index = Collections.binarySearch(recordsTheta, record, thetaComparator); - if(index >= 0) { + if (index >= 0) { return recordsTheta.get(index); } - index = - index - 1; - if(index >= recordsTheta.size()) { + index = -index - 1; + if (index >= recordsTheta.size()) { index = 0; } double theta2 = recordsTheta.get(index).getTheta(); // Take previous record index -= 1; - if(index < 0) { + if (index < 0) { index = recordsTheta.size() - 1; } double theta1 = recordsTheta.get(index).getTheta(); index = Collections.binarySearch(recordsPhi, record, phiComparator); - index = - index - 1; - if(index >= recordsPhi.size()) { + index = -index - 1; + if (index >= recordsPhi.size()) { index = 0; } double phi2 = recordsPhi.get(index).getPhi(); @@ -186,12 +233,12 @@ public DirectivityRecord getRecord(double theta, double phi, int interpolate) { recordsTheta.get(indexes[2]), recordsTheta.get(indexes[3]) }; - if(interpolate == 0) { + if (interpolate == 0) { double minDist = Double.MAX_VALUE; DirectivityRecord closest = allRecords[0]; - for(DirectivityRecord r : allRecords) { + for (DirectivityRecord r : allRecords) { double testDist = getDistance(theta, phi, r); - if(testDist < minDist) { + if (testDist < minDist) { minDist = testDist; closest = r; } @@ -207,14 +254,14 @@ public DirectivityRecord getRecord(double theta, double phi, int interpolate) { // compute expected phi, theta as a normalized vector double x = Math.max(0, Math.min(1, getDistance(x1, record.phi, record) / xLength)); double y = Math.max(0, Math.min(1, getDistance(record.theta, y1, record) / yLength)); - if(Double.isNaN(x)) { + if (Double.isNaN(x)) { x = 0; } - if(Double.isNaN(y)) { + if (Double.isNaN(y)) { y = 0; } double[] att = new double[frequencies.length]; - for(int idFrequency = 0; idFrequency < frequencies.length; idFrequency++) { + for (int idFrequency = 0; idFrequency < frequencies.length; idFrequency++) { att[idFrequency] = Utils.wToDb(Utils.dbToW(allRecords[0].attenuation[idFrequency]) * (1 - x) * (1 - y) + Utils.dbToW(allRecords[1].attenuation[idFrequency]) * x * (1 - y) + Utils.dbToW(allRecords[3].attenuation[idFrequency]) * (1 - x) * y @@ -241,7 +288,7 @@ public static class ThetaComparator implements Comparator, Se @Override public int compare(DirectivityRecord o1, DirectivityRecord o2) { final int thetaCompare = Double.compare(o1.theta, o2.theta); - if(thetaCompare != 0) { + if (thetaCompare != 0) { return thetaCompare; } return Double.compare(o1.phi, o2.phi); @@ -254,18 +301,29 @@ public static class PhiComparator implements Comparator, Seri @Override public int compare(DirectivityRecord o1, DirectivityRecord o2) { final int phiCompare = Double.compare(o1.phi, o2.phi); - if(phiCompare != 0) { + if (phiCompare != 0) { return phiCompare; } return Double.compare(o1.theta, o2.theta); } } + + /** + * directivity record is the attenuation value for a specific angle (theta, phi) - a point of the directivity sphere + */ public static class DirectivityRecord { private double theta; private double phi; private double[] attenuation; + /** + * directivity record is the attenuation value for a specific angle (theta, phi) - a point of the directivity sphere + * + * @param theta (-π/2 π/2) 0 is horizontal; π is top + * @param phi (0 2π) 0 is front + * @param attenuation in dB + */ public DirectivityRecord(double theta, double phi, double[] attenuation) { this.theta = theta; this.phi = phi; @@ -297,7 +355,7 @@ public int hashCode() { @Override public String toString() { return String.format(Locale.ROOT, "DirectivityRecord{theta=%.2f (%.2g°)" + - ", phi=%.2f (%.2g°) , attenuation=%s}", theta, Math.toDegrees(theta), phi, Math.toDegrees(phi), + ", phi=%.2f (%.2g°) , attenuation=%s}", theta, Math.toDegrees(theta), phi, Math.toDegrees(phi), Arrays.toString(attenuation)); } diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/RailWayParameters.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/RailWayParameters.java new file mode 100644 index 000000000..63b3edd33 --- /dev/null +++ b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/RailWayParameters.java @@ -0,0 +1,77 @@ +/** + * NoiseModelling is a library capable of producing noise maps. It can be freely used either for research and education, as well as by experts in a professional use. + *

+ * NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. + *

+ * Official webpage : http://noise-planet.org/noisemodelling.html + * Contact: contact@noise-planet.org + */ + +package org.noise_planet.noisemodelling.emission.railway; +/** + * Railway noise evaluation from Cnossos reference : COMMISSION DIRECTIVE (EU) 2015/996 + * of 19 May 2015 establishing common noise assessment methods according to Directive 2002/49/EC + * of the European Parliament and of the Council + * + * amending, for the purposes of adapting to scientific and technical progress, Annex II to + * Directive 2002/49/EC of the European Parliament and of the Council as regards + * common noise assessment methods + * + * part 2.3. Railway noise + * + * Return the dB value corresponding to the parameters + * @author Adrien Le Bellec, Université Gustave Eiffel + * @author Olivier Chiello, Université Gustave Eiffel + */ + +import org.noise_planet.noisemodelling.emission.LineSource; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import static org.noise_planet.noisemodelling.emission.utils.Utils.Vperhour2NoiseLevel; +import static org.noise_planet.noisemodelling.emission.utils.Utils.sumDbArray; + +/** + * Data result stockage + */ +public class RailWayParameters { + public Map railwaySourceList = new HashMap<>(); + + + public Map getRailwaySourceList() { + return railwaySourceList; + } + + public void setRailwaySourceList(Map railwaySourceList) { + this.railwaySourceList = railwaySourceList; + } + + public void addRailwaySource(String ID, LineSource lineSource) { + this.railwaySourceList.put(ID, lineSource); + } + + public RailWayParameters sumRailwaySource(RailWayParameters lineSource1, RailWayParameters lineSource2) { + if (lineSource2.getRailwaySourceList().size()>0){ + for (Map.Entry railwaySourceEntry : lineSource1.getRailwaySourceList().entrySet()) { + double[] lW1 = railwaySourceEntry.getValue().getlW(); + double[] lW2 = lineSource2.getRailwaySourceList().get(railwaySourceEntry.getKey()).getlW(); + lineSource1.getRailwaySourceList().get(railwaySourceEntry.getKey()).setlW(sumDbArray(lW1, lW2)); + } + } + return lineSource1; + } + + public void appendVperHour(double Qm, double vm) throws IOException { + for (Map.Entry railwaySourceEntry : railwaySourceList.entrySet()) { + double[] lW ; + lW = railwaySourceEntry.getValue().getlW(); + for (int i = 0; i < railwaySourceEntry.getValue().getlW().length; i++) { + lW[i] = Vperhour2NoiseLevel(lW[i], Qm, vm); + } + railwaySourceEntry.getValue().setlW(lW); + } + } + +} diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/Railway.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/Railway.java new file mode 100644 index 000000000..3e32ca412 --- /dev/null +++ b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/Railway.java @@ -0,0 +1,168 @@ +/** + * NoiseModelling is a library capable of producing noise maps. It can be freely used either for research and education, as well as by experts in a professional use. + *

+ * NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. + *

+ * Official webpage : http://noise-planet.org/noisemodelling.html + * Contact: contact@noise-planet.org + */ + +package org.noise_planet.noisemodelling.emission.railway; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.NullNode; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Iterator; +import java.util.Map; + +/** + * Railway noise evaluation from Cnossos reference : COMMISSION DIRECTIVE (EU) 2015/996 + * of 19 May 2015 establishing common noise assessment methods according to Directive 2002/49/EC + * of the European Parliament and of the Council + * + * amending, for the purposes of adapting to scientific and technical progress, Annex II to + * Directive 2002/49/EC of the European Parliament and of the Council as regards + * common noise assessment methods + * + * part 2.3. Railway noise + * + * Return the dB value corresponding to the parameters + * @author Adrien Le Bellec, Université Gustave Eiffel + * @author Olivier Chiello, Université Gustave Eiffel + */ + +public class Railway { + private JsonNode railWayData; + private JsonNode vehicleData; + private JsonNode trainsetData; + + private static JsonNode parse(InputStream inputStream) { + try { + ObjectMapper mapper = new ObjectMapper(); + return mapper.readTree(inputStream); + } catch (IOException ex) { + return NullNode.getInstance(); + } + } + + public static Iterable iteratorToIterable(Iterator iterator) { + return () -> iterator; + } + + public void setVehicleDataFile(String VehicleData) { + this.vehicleData = parse(Railway.class.getResourceAsStream(VehicleData)); + } + public void setTrainSetDataFile(String TrainsetData) { + this.trainsetData = parse(Railway.class.getResourceAsStream(TrainsetData)); + } + public void setRailwayDataFile(String RailWayData) { + this.railWayData = parse(Railway.class.getResourceAsStream(RailWayData)); + } + + public JsonNode getVehicleNode(String typeVehicle) { + JsonNode vehicle = vehicleData.get(typeVehicle); + if (vehicle == null) { + throw new IllegalArgumentException(String.format("Vehicle %s not found must be one of :\n -%s", typeVehicle, + String.join("\n -", iteratorToIterable(vehicleData.fieldNames())))); + } + return vehicle; + } + + /** + * Get the CNOSSOS coefficients from a specific file version (French have their own CNOSSOS coefficients). + * @return get the CNOSSOS Coefficients + */ + public JsonNode getRailWayData() { + return this.railWayData; + } + + /** + * Get the vehicles attributes + * @return Coefficients related to the characteristics of vehicles + */ + public JsonNode getVehicleData() { + return this.vehicleData; + } + + /** + * Specific to French adaptation of the CNOSSOS method + * Get the SNCF composition of a train (one train can contains one or more vehicles) + * @return SNCF composition of a train + */ + public JsonNode getTrainsetData() { + return this.trainsetData; + } + + /** + * Get vehicle from a trainset + * @param trainName Name of a Trainset + * @return a map of < vehicles , number of vehicles > + */ + public Map getVehicleFromTrainset(String trainName) { + Map vehicles = null; + for (Iterator> it = getTrainsetData().fields(); it.hasNext(); ) { + Map.Entry elt = it.next(); + if (trainName.equals(elt.getKey())) { + + ObjectMapper mapper = new ObjectMapper(); + vehicles = mapper.convertValue(elt.getValue(), new TypeReference>() { + }); + break; + } + } + return vehicles; + } + + + /** + * Find if a specific vehicle is in the Vehicle List + * @param vehicleName Name of a Vehicule + * @return true if in list + */ + public boolean isInVehicleList(String vehicleName) { + boolean inlist = false; + for (Iterator> it = getVehicleData().fields(); it.hasNext(); ) { + Map.Entry elt = it.next(); + if (vehicleName.equals(elt.getKey())) { + inlist = true; + break; + } + } + return inlist; + } + + + + /** + * Evaluate the sound level for one Vehicle + * @param vehicleParameters Vehicle Noise emission parameters + * @param trackParameters Track Noise emission parameters + * constant speed + * + * @return LWRoll / LWTraction A and B / LWAerodynamic A and B / LWBridge level in dB + **/ + public RailWayParameters evaluate(RailwayVehicleParameters vehicleParameters, RailwayTrackParameters trackParameters) throws IOException { + + String typeVehicle = vehicleParameters.getTypeVehicle(); + double speedVehicle = vehicleParameters.getSpeedVehicle(); + double vehPerHour = vehicleParameters.getNumberVehicle(); + + boolean isTunnel = trackParameters.getIsTunnel(); + + if (isTunnel) { + RailWayParameters lWRailWay = new RailWayParameters(); + return lWRailWay; + } else { + RailWayParameters lWRailWay = new RailWayParameters(); + return lWRailWay; + } + } + + +} + + diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/RailwayTrackParameters.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/RailwayTrackParameters.java new file mode 100644 index 000000000..84859e07e --- /dev/null +++ b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/RailwayTrackParameters.java @@ -0,0 +1,80 @@ +/** + * NoiseModelling is a library capable of producing noise maps. It can be freely used either for research and education, as well as by experts in a professional use. + *

+ * NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. + *

+ * Official webpage : http://noise-planet.org/noisemodelling.html + * Contact: contact@noise-planet.org + */ + +package org.noise_planet.noisemodelling.emission.railway; +/** + * Railway noise evaluation from Cnossos reference : COMMISSION DIRECTIVE (EU) 2015/996 + * of 19 May 2015 establishing common noise assessment methods according to Directive 2002/49/EC + * of the European Parliament and of the Council + * + * amending, for the purposes of adapting to scientific and technical progress, Annex II to + * Directive 2002/49/EC of the European Parliament and of the Council as regards + * common noise assessment methods + * + * part 2.3. Railway noise + * + * @author Adrien Le Bellec, Université Gustave Eiffel + * @author Olivier Chiello, Université Gustave Eiffel + */ + + +/** + * Parameters Track + */ + +public class RailwayTrackParameters { + //set default value + private double speedTrack; // maximum speed on the track (km/h) + private double speedCommercial; // commercial speed on the track (km/h) + private int nTrack; + private boolean isTunnel; + + public RailwayTrackParameters() { + + setSpeedTrack(speedTrack); + setSpeedCommercial(speedCommercial); + setIsTunnel(isTunnel); + setNTrack(nTrack); + + } + + public boolean getIsTunnel() { + return isTunnel; + } + + public void setIsTunnel(boolean tunnel) { + isTunnel = tunnel; + } + + public double getNTrack() { + return nTrack; + } + + public void setNTrack(int nTrack) { + this.nTrack = nTrack; + } + + + public double getSpeedTrack() { + return speedTrack; + } + + public void setSpeedTrack(double speedTrack) { + this.speedTrack = speedTrack; + } + + + public double getSpeedCommercial() { + return speedCommercial; + } + + public void setSpeedCommercial(double speedCommercial) { + this.speedCommercial = speedCommercial; + } +} diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/RailwayVehicleParameters.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/RailwayVehicleParameters.java new file mode 100644 index 000000000..2aa572b3c --- /dev/null +++ b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/RailwayVehicleParameters.java @@ -0,0 +1,72 @@ +/** + * NoiseModelling is a library capable of producing noise maps. It can be freely used either for research and education, as well as by experts in a professional use. + *

+ * NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. + *

+ * Official webpage : http://noise-planet.org/noisemodelling.html + * Contact: contact@noise-planet.org + */ + +package org.noise_planet.noisemodelling.emission.railway; + +/** + * Railway noise evaluation from Cnossos reference : COMMISSION DIRECTIVE (EU) 2015/996 + * of 19 May 2015 establishing common noise assessment methods according to Directive 2002/49/EC + * of the European Parliament and of the Council + * + * amending, for the purposes of adapting to scientific and technical progress, Annex II to + * Directive 2002/49/EC of the European Parliament and of the Council as regards + * common noise assessment methods + * + * part 2.3. Railway noise + * + * @author Adrien Le Bellec, Université Gustave Eiffel + * @author Olivier Chiello, Université Gustave Eiffel + */ + +/** + * Parameters Vehicule + */ + +public class RailwayVehicleParameters { + + // set default value + private String typeVehicle = ""; // name of the vehicles + private double speedVehicle; // speed of the vehicles (km/h) + private double vehiclePerHour = 1; // Average light vehicle per hour + + + public RailwayVehicleParameters() { + + setTypeVehicle(typeVehicle); + setSpeedVehicle(speedVehicle); + setVehiclePerHour(vehiclePerHour); + + } + + + public void setVehiclePerHour(double vehiclePerHour) { + this.vehiclePerHour = vehiclePerHour; + } + + public String getTypeVehicle() { + return typeVehicle; + } + + public void setTypeVehicle(String typeVehicle) { + this.typeVehicle = typeVehicle; + } + + public double getSpeedVehicle() { + return speedVehicle; + } + + public void setSpeedVehicle(double speedVehicle) { + this.speedVehicle = speedVehicle; + } + + public double getNumberVehicle() { + return vehiclePerHour; + } + +} diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/cnossos/RailWayCnossosParameters.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/cnossos/RailWayCnossosParameters.java new file mode 100644 index 000000000..20d2fc36b --- /dev/null +++ b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/cnossos/RailWayCnossosParameters.java @@ -0,0 +1,217 @@ +/** + * NoiseModelling is a library capable of producing noise maps. It can be freely used either for research and education, as well as by experts in a professional use. + *

+ * NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. + *

+ * Official webpage : http://noise-planet.org/noisemodelling.html + * Contact: contact@noise-planet.org + */ + +package org.noise_planet.noisemodelling.emission.railway.cnossos; +/** + * Railway noise evaluation from Cnossos reference : COMMISSION DIRECTIVE (EU) 2015/996 + * of 19 May 2015 establishing common noise assessment methods according to Directive 2002/49/EC + * of the European Parliament and of the Council + * + * amending, for the purposes of adapting to scientific and technical progress, Annex II to + * Directive 2002/49/EC of the European Parliament and of the Council as regards + * common noise assessment methods + * + * part 2.3. Railway noise + * + * Return the dB value corresponding to the parameters + * @author Adrien Le Bellec, Université Gustave Eiffel + * @author Olivier Chiello, Université Gustave Eiffel + */ + +import org.noise_planet.noisemodelling.emission.directivity.DirectivitySphere; +import org.noise_planet.noisemodelling.emission.LineSource; +import org.noise_planet.noisemodelling.emission.railway.RailWayParameters; + +import java.util.Arrays; +import java.util.Map; + +import static org.noise_planet.noisemodelling.emission.utils.Utils.sumDbArray; + +/** + * Data result stockage + */ +public class RailWayCnossosParameters extends RailWayParameters { + + + public static final Integer[] DEFAULT_FREQUENCIES_THIRD_OCTAVE = new Integer[]{50, 63, 80, 100, 125, 160, 200, 250, 315, 400, 500, 630, 800, 1000, 1250, 1600, 2000, 2500, 3150, 4000, 5000, 6300, 8000, 10000}; + + private double[] lWRolling = new double[DEFAULT_FREQUENCIES_THIRD_OCTAVE.length]; + private double[] lWTractionA = new double[DEFAULT_FREQUENCIES_THIRD_OCTAVE.length]; + private double[] lWTractionB = new double[DEFAULT_FREQUENCIES_THIRD_OCTAVE.length]; + private double[] lWAerodynamicA = new double[DEFAULT_FREQUENCIES_THIRD_OCTAVE.length]; + private double[] lWAerodynamicB = new double[DEFAULT_FREQUENCIES_THIRD_OCTAVE.length]; + private double[] lWBridge = new double[DEFAULT_FREQUENCIES_THIRD_OCTAVE.length]; + + public RailWayCnossosParameters() { + Arrays.fill(lWRolling, -99.99); + Arrays.fill(lWTractionA, -99.99); + Arrays.fill(lWTractionB, -99.99); + Arrays.fill(lWAerodynamicA, -99.99); + Arrays.fill(lWAerodynamicB, -99.99); + Arrays.fill(lWBridge, -99.99); + + setLWRolling(lWRolling); + setLWTractionA(lWTractionA); + setLWTractionB(lWTractionB); + setLWAerodynamicA(lWAerodynamicA); + setLWAerodynamicB(lWAerodynamicB); + setLWBridge(lWBridge); + + } + + + + public RailWayCnossosParameters(double[] lWRolling, double[] lWTractionA, double[] lWTractionB, double[] lWAerodynamicA, double[] lWAerodynamicB, double[] lWBridge) { + setLWRolling(lWRolling); + setLWTractionA(lWTractionA); + setLWTractionB(lWTractionB); + setLWAerodynamicA(lWAerodynamicA); + setLWAerodynamicB(lWAerodynamicB); + setLWBridge(lWBridge); + } + + /** + * Sum two train emission instances + * @param lineSource1 Emission 1 + * @param lineSource2 Emission 2 + * @return Merged level + */ + public static RailWayCnossosParameters sumRailwaySource(RailWayCnossosParameters lineSource1, RailWayCnossosParameters lineSource2) { + if (lineSource2.getRailwaySourceList().size()>0){ + for (Map.Entry railwaySourceEntry : lineSource1.getRailwaySourceList().entrySet()) { + double[] lW1 = railwaySourceEntry.getValue().getlW(); + double[] lW2 = lineSource2.getRailwaySourceList().get(railwaySourceEntry.getKey()).getlW(); + lineSource1.getRailwaySourceList().get(railwaySourceEntry.getKey()).setlW(sumDbArray(lW1, lW2)); + } + } + return lineSource1; + } + /* public static RailWayCnossosParameters sumRailwaySource(RailWayCnossosParameters railWayLW1, RailWayCnossosParameters railWayLW2) { + RailWayCnossosParameters railWayLW = new RailWayCnossosParameters(); + + railWayLW.setLWRolling(sumDbArray(railWayLW1.getLWRolling(), railWayLW2.getLWRolling())); + railWayLW.setLWAerodynamicA(sumDbArray(railWayLW1.getLWAerodynamicA(), railWayLW2.getLWAerodynamicA())); + railWayLW.setLWAerodynamicB(sumDbArray(railWayLW1.getLWAerodynamicB(), railWayLW2.getLWAerodynamicB())); + railWayLW.setLWBridge(sumDbArray(railWayLW1.getLWBridge(), railWayLW2.getLWBridge())); + railWayLW.setLWTractionA(sumDbArray(railWayLW1.getLWTractionA(), railWayLW2.getLWTractionA())); + railWayLW.setLWTractionB(sumDbArray(railWayLW1.getLWTractionB(), railWayLW2.getLWTractionB())); + + + return railWayLW; + }*/ + + + + + public double[] getLWRolling() { + return lWRolling; + } + + public void setLWRolling(double[] LWRolling) { + this.lWRolling = LWRolling; + } + + public double[] getLWTractionA() { + return lWTractionA; + } + + public void setLWTractionA(double[] LWTractionA) { + this.lWTractionA = LWTractionA; + } + + public double[] getLWTractionB() { + return lWTractionB; + } + + public void setLWTractionB(double[] LWTractionB) { + this.lWTractionB = LWTractionB; + } + + public double[] getLWAerodynamicA() { + return lWAerodynamicA; + } + + public void setLWAerodynamicA(double[] LWAerodynamicA) { + this.lWAerodynamicA = LWAerodynamicA; + } + + public double[] getLWAerodynamicB() { + return lWAerodynamicB; + } + + public void setLWAerodynamicB(double[] LWAerodynamicB) { + this.lWAerodynamicB = LWAerodynamicB; + } + + public double[] getLWBridge() { + return lWBridge; + } + + public void setLWBridge(double[] LWBridge) { + this.lWBridge = LWBridge; + } + + /** + * Compute the attenuation for the specified noise source and parameters + * @param phi (0 2π) 0 is front + * @param theta (-π/2 π/2) 0 is horizontal π is top + * @param frequency Emission frequency + * @return Directional sound power + */ + public static Double getDirectionAttenuation(LineSource lineSource, double phi, double theta, double frequency) { + if (lineSource.getTypeSource().equals("BRIDGE")) { + return 0.0; + } + theta = Math.min(Math.max(theta, -(Math.PI / 2)), Math.PI / 2); + phi = Math.max(0, Math.min(phi, 2 * Math.PI)); + + int height_index =0; + + if (lineSource.getTypeSource().equals("TRACTIONB") || lineSource.getTypeSource().equals("AERODYNAMICB")) { + height_index =1; + } + + double attHorizontal = 10 * Math.log10(0.01 + 0.99 * Math.pow(Math.sin(phi), 2)); + double attVertical = 0; + if (height_index == 0) { + if (theta > 0) { + attVertical = (40.0 / 3.0) + * (2.0 / 3.0 * Math.sin(2 * theta) - Math.sin(theta)) + * Math.log10((frequency + 600.0) / 200.0); + } + } else if (lineSource.getTypeSource().equals("AERODYNAMICB")) {// for aerodynamic effect only + if (theta < 0) { + attVertical = 10 * Math.log10(Math.pow(Math.cos(theta), 2)); + } + } + return attHorizontal + attVertical; + } + + public static final class RailwayDirectivitySphere implements DirectivitySphere { + LineSource lineSource; + + public RailwayDirectivitySphere(LineSource lineSource) { + this.lineSource = lineSource; + } + + @Override + public double getAttenuation(double frequency, double phi, double theta) { + return RailWayCnossosParameters.getDirectionAttenuation(lineSource, phi, theta, frequency); + } + + @Override + public double[] getAttenuationArray(double[] frequencies, double phi, double theta) { + double[] ret = new double[frequencies.length]; + for (int idFrequency = 0; idFrequency < frequencies.length; idFrequency++) { + ret[idFrequency] = getAttenuation(frequencies[idFrequency], phi, theta); + } + return ret; + } + } +} diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/cnossos/RailwayCnossos.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/cnossos/RailwayCnossos.java new file mode 100644 index 000000000..a9e2db5f6 --- /dev/null +++ b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/cnossos/RailwayCnossos.java @@ -0,0 +1,419 @@ +/** + * NoiseModelling is a library capable of producing noise maps. It can be freely used either for research and education, as well as by experts in a professional use. + *

+ * NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. + *

+ * Official webpage : http://noise-planet.org/noisemodelling.html + * Contact: contact@noise-planet.org + */ + +package org.noise_planet.noisemodelling.emission.railway.cnossos; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.NullNode; +import org.noise_planet.noisemodelling.emission.LineSource; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Iterator; +import java.util.Locale; + +import static java.lang.Math.min; +import static org.noise_planet.noisemodelling.emission.utils.interpLinear.interpLinear; + +/** + * Railway noise evaluation from Cnossos reference : COMMISSION DIRECTIVE (EU) 2015/996 + * of 19 May 2015 establishing common noise assessment methods according to Directive 2002/49/EC + * of the European Parliament and of the Council + * + * amending, for the purposes of adapting to scientific and technical progress, Annex II to + * Directive 2002/49/EC of the European Parliament and of the Council as regards + * common noise assessment methods + * + * part 2.3. Railway noise + * + * Return the dB value corresponding to the parameters + * @author Adrien Le Bellec, Université Gustave Eiffel + * @author Olivier Chiello, Université Gustave Eiffel + */ + +public class RailwayCnossos extends org.noise_planet.noisemodelling.emission.railway.Railway { + + public RailwayCnossos() { + } + + private static JsonNode parse(InputStream inputStream) { + try { + ObjectMapper mapper = new ObjectMapper(); + return mapper.readTree(inputStream); + } catch (IOException ex) { + return NullNode.getInstance(); + } + } + + public static Iterable iteratorToIterable(Iterator iterator) { + return () -> iterator; + } + + /** + * get Wheel Roughness by wavenumber - Only CNOSSOS + * @param typeVehicle + * @param fileVersion + * @param lambdaId + * @return + */ + public Double getWheelRoughness(String typeVehicle, String fileVersion, int lambdaId) { // + int refId = getVehicleNode(typeVehicle).get("RefRoughness").intValue(); + return getRailWayData().get("Vehicle").get("WheelRoughness").get(String.valueOf(refId)).get("Values").get(lambdaId).doubleValue(); + } + + /** + * get Contact Filter by wavenumber - Only CNOSSOS + * @param typeVehicle type of a vehicle, for example : SNCF2 + * @param lambdaId wavenumber (between 1 and 34 corresponding the normalised third octave bands from 2000mm to 0.8mm). + * @return contact filter + */ + public Double getContactFilter(String typeVehicle, int lambdaId) { // + int refId = getVehicleNode(typeVehicle).get("RefContact").intValue(); + return getRailWayData().get("Vehicle").get("ContactFilter").get(String.valueOf(refId)).get("Values").get(lambdaId).doubleValue(); + } + + /** + * get Track Roughness Filter by wavenumber - Only CNOSSOS + * @param trackRoughnessId + * @param lambdaId + * @return + */ + public Double getTrackRoughness(int trackRoughnessId, int lambdaId) { // + return getRailWayData().get("Track").get("RailRoughness").get(String.valueOf(trackRoughnessId)).get("Values").get(lambdaId).doubleValue(); + } + + /** + * Axles number by vehicles + * @param typeVehicle + * @return + */ + public double getAxlesPerVeh(String typeVehicle) { // + return getVehicleNode(typeVehicle).get("NbAxlePerVeh").doubleValue(); + } + + /** + * get Nb of coach by vehicle + * @param typeVehicle + * @return + */ + public int getNbCoach(String typeVehicle) { // + int nbCoach; + try { + nbCoach = getVehicleData().get(typeVehicle).get("NbCoach").intValue(); + } catch (Exception e) { + nbCoach = 1; + } + + return nbCoach; + } + + + public double getTractionNoise(String typeVehicle, int runningCondition, String sourceHeightId, String fileVersion, int freqId) { // + int refId = getVehicleNode(typeVehicle).get("RefTraction").intValue(); + double tractionSpectre =0; + + String condition = "ConstantSpeed"; + if (refId != 0) { + switch (runningCondition) { + case 0: + condition = "ConstantSpeed"; + break; + case 1: + condition = "AccelerationSpeed"; + break; + case 3: + condition = "DecelerationSpeed"; + break; + case 4: + condition = "IdlingSpeed"; + break; + } + try { + tractionSpectre = getRailWayData().get("Vehicle").get(condition).get(String.valueOf(refId)).get("Values").get(sourceHeightId).get(freqId).doubleValue(); + } catch (NullPointerException ex) { + throw new IllegalArgumentException(String.format(Locale.ROOT, "Could not find traction spectrum for the following parameters " + + "getRailWayData(%d).get(\"Vehicle\").get(%s).get(String.valueOf" + + "(%d)).get(\"Values\").get(%s).get(%d)", fileVersion, condition, refId, sourceHeightId, freqId)); + } + } + return tractionSpectre; + } + + public double getAerodynamicNoise(String typeVehicle, String sourceHeightId, String fileVersion, int freqId) { // + int refId = getVehicleNode(typeVehicle).get("RefAerodynamic").intValue(); + return getRailWayData().get("Vehicle").get("AerodynamicNoise").get(String.valueOf(refId)).get("Values").get(sourceHeightId).get(freqId).doubleValue(); + } + + + public Double getBridgeStructural(int bridgeId, int freqId) { + return getRailWayData().get("Track").get("BridgeConstant").get(String.valueOf(bridgeId)).get("Values").get(freqId).doubleValue(); + } + + public Double getTrackTransfer(int trackTransferId, int freqId) { // + return getRailWayData().get("Track").get("TrackTransfer").get(String.valueOf(trackTransferId)).get("Spectre").get(freqId).doubleValue(); + } + + public Double getImpactNoise(int impactNoiseId, int freqId) { // + return getRailWayData().get("Track").get("ImpactNoise").get(String.valueOf(impactNoiseId)).get("Values").get(freqId).doubleValue(); + } + + public Double getVehTransfer(String typeVehicle, int freqId) { + int RefTransfer = getVehicleNode(typeVehicle).get("RefTransfer").intValue(); + return getRailWayData().get("Vehicle").get("Transfer").get(String.valueOf(RefTransfer)).get("Spectre").get(freqId).doubleValue(); + + } + + public Double getLRoughness(String typeVehicle, int trackRoughnessId, String vehicleFileVersion, int idLambda) { // + double wheelRoughness = getWheelRoughness(typeVehicle, vehicleFileVersion, idLambda); + double trackRoughness = getTrackRoughness(trackRoughnessId, idLambda); + return 10 * Math.log10(Math.pow(10, wheelRoughness / 10) + Math.pow(10, trackRoughness / 10)); + } + + /** + * Check if it exists some NaN values in the Roughness sound level. + * They appear when calculating the roughness in the frequency domain by interpolating the roughness in the wavelength domain + * @param roughnessLtot + * @return + */ + private double[] checkNanValue(double[] roughnessLtot) { + int indice_NaN = 0; + for (int i = 0; i < roughnessLtot.length-2; i++) { + if (Double.isNaN(roughnessLtot[i])) { + indice_NaN++; + } + } + for (int i = 0; i < indice_NaN; i++) { + roughnessLtot[i] = roughnessLtot[indice_NaN + 1]; + } + return roughnessLtot; + } + + /** + * Evaluate the sound level for one Vehicle + * @param vehicleParameters Vehicle Noise emission parameters + * @param trackParameters Track Noise emission parameters + * constant speed + * + * @return LWRoll / LWTraction A and B / LWAerodynamic A and B / LWBridge level in dB + **/ + public RailWayCnossosParameters evaluate(RailwayVehicleCnossosParameters vehicleParameters, RailwayTrackCnossosParameters trackParameters) throws IOException { + + String vehicleFileVersion = vehicleParameters.getFileVersion(); + String trackFileVersion = trackParameters.getFileVersion(); + String typeVehicle = vehicleParameters.getTypeVehicle(); + + double speedVehicle = vehicleParameters.getSpeedVehicle(); + double vehPerHour = vehicleParameters.getNumberVehicle(); + double axlesPerVeh = getAxlesPerVeh(typeVehicle); + int runningCondition = vehicleParameters.getRunningCondition(); + + double speedTrack = trackParameters.getSpeedTrack(); + double speedCommercial = trackParameters.getSpeedCommercial(); + int trackRoughnessId = trackParameters.getRailRoughness(); + int trackTransferId = trackParameters.getTrackTransfer(); + int impactId = trackParameters.getImpactNoise(); + int bridgeId = trackParameters.getBridgeTransfert(); + int curvature = trackParameters.getCurvature(); + + // get speed of the vehicle + double speed = min(speedVehicle, min(speedTrack, speedCommercial)); + + boolean isTunnel = trackParameters.getIsTunnel(); + // %% Take into account the number of coach and the number of units + // 10*log10(NbUnit*NbCoach); + + RailWayCnossosParameters railWayParameters = new RailWayCnossosParameters(); + + if (isTunnel) { + return railWayParameters; + } else { + // Rolling noise calcul + double[] lW = getLWRolling(typeVehicle, trackRoughnessId, impactId, curvature, speed, trackTransferId, trackFileVersion, axlesPerVeh); + railWayParameters.addRailwaySource("ROLLING", new LineSource(lW,4, "ROLLING")); + lW = getLWTraction(typeVehicle, runningCondition, "A", vehicleFileVersion); + railWayParameters.addRailwaySource("TRACTIONA", new LineSource(lW,0.05, "TRACTIONA")); + lW = getLWTraction(typeVehicle, runningCondition, "B", vehicleFileVersion); + railWayParameters.addRailwaySource("TRACTIONB", new LineSource(lW,4, "TRACTIONB")); + lW = getLWAero(typeVehicle, speed, "A", vehicleFileVersion); + railWayParameters.addRailwaySource("AERODYNAMICA", new LineSource(lW,0.05, "AERODYNAMICA")); + lW = getLWAero(typeVehicle, speed, "B", vehicleFileVersion); + railWayParameters.addRailwaySource("AERODYNAMICB", new LineSource(lW,4, "AERODYNAMICB")); + lW = getLWBridge(typeVehicle, trackRoughnessId, impactId, bridgeId, speed, trackFileVersion,axlesPerVeh); + railWayParameters.addRailwaySource("BRIDGE", new LineSource(lW,4, "BRIDGE")); + + railWayParameters.appendVperHour(vehPerHour*getNbCoach(typeVehicle), speed); + return railWayParameters; + } + } + + /** + * traction or Aerodynamic Level. + * @param typeVehicle vehicle data base + * @param height height source + * @return lWSpectre(freq) (Traction or Aerodynamic) + **/ + private double[] getLWTraction(String typeVehicle, int runningCondition, String height, String fileVersion) { + double[] lWSpectre = new double[24]; + for (int idFreq = 0; idFreq < 24; idFreq++) { + lWSpectre[idFreq] = getTractionNoise(typeVehicle, runningCondition, height, fileVersion, idFreq); + } + return lWSpectre; + } + + /** + * traction or Aerodynamic Level. + * @param typeVehicle vehicle data base + * @param speed min speed between vehicle and track + * @param height height source + * @return lWSpectre(freq) (Traction or Aerodynamic) + **/ + private double[] getLWAero(String typeVehicle, double speed, String height, String fileVersion) { + double[] lWSpectre = new double[24]; + + for (int idFreq = 0; idFreq < 24; idFreq++) { + + int refId = getVehicleNode(typeVehicle).get("RefAerodynamic").intValue(); + if (speed < 200 || refId == 0) { + lWSpectre[idFreq] = -99; + } else { + lWSpectre[idFreq] = getAerodynamicNoise(typeVehicle, height, fileVersion, idFreq); + double v0Aero = Double.parseDouble(getRailWayData().get("Vehicle").get("AerodynamicNoise").get(String.valueOf(refId)).get("V0").asText()); + double alphaAero = Double.parseDouble(getRailWayData().get("Vehicle").get("AerodynamicNoise").get(String.valueOf(refId)).get("Alpha").asText()); + lWSpectre[idFreq] = lWSpectre[idFreq] + alphaAero * Math.log10(speed / v0Aero); + } + } + + return lWSpectre; + } + + + /** + * Rolling Level. + * @param typeVehicle vehicle data base + * @param trackRoughnessId track Roughness reference + * @param impactId impact reference + * @param speed min speed between vehicle and track + * + * Step 1 + * wavelength to frequecy (evaluateRoughnessLtotFreq) + * Step 2 + * calcul sound power of wheel and bogie emission + * calcul sound power of rail sleeper and ballast/slab emission + * todo add sound power of superstructure emission ? + * + * @return lWRoll(freq) + **/ + + + private double[] getLWRolling(String typeVehicle, int trackRoughnessId, int impactId, int curvature, double speed, int trackTransferId, String trackFileVersion, double axlesPerVeh) { + + double[] trackTransfer = new double[24]; + double[] lWTr = new double[24]; + double[] vehTransfer = new double[24]; + double[] lWVeh = new double[24]; + double[] lW = new double[24]; + + // roughnessLtot = CNOSSOS p.19 (2.3.7) + double[] roughnessLtot = checkNanValue(getLWRoughness(typeVehicle, trackRoughnessId, impactId, speed, trackFileVersion)); + + for (int idFreq = 0; idFreq < 24; idFreq++) { + // lWTr = CNOSSOS p.20 (2.3.8) + trackTransfer[idFreq] = getTrackTransfer(trackTransferId, idFreq); + lWTr[idFreq] = roughnessLtot[idFreq] + trackTransfer[idFreq] + 10 * Math.log10(axlesPerVeh); + + // lWVeh = CNOSSOS p.20 (2.3.9) + vehTransfer[idFreq] = getVehTransfer(typeVehicle, idFreq); + lWVeh[idFreq] = roughnessLtot[idFreq] + vehTransfer[idFreq] + 10 * Math.log10(axlesPerVeh); + // lWRoll = CNOSSOS p.19 (2.3.7) + lW[idFreq] = 10 * Math.log10(Math.pow(10, lWTr[idFreq] / 10) + Math.pow(10, lWVeh[idFreq] / 10)); + if (curvature == 1) { + lW[idFreq] = lW[idFreq] + 5; + } else if (curvature == 2) { + lW[idFreq] = lW[idFreq] + 8; + } else if (curvature == 3) { + lW[idFreq] = lW[idFreq] + 8; + } + } + + return lW; + } + + private double[] getLWBridge(String typeVehicle, int trackRoughnessId, int impactId, int bridgeId, double speed, String trackFileVersion, double axlesPerVeh) { + + double[] lW = new double[24]; + + // roughnessLtot = CNOSSOS p.19 (2.3.7) + double[] roughnessLtot = checkNanValue(getLWRoughness(typeVehicle, trackRoughnessId, impactId, speed, trackFileVersion)); + + double[] lWBridge = new double[24]; + for (int idFreq = 0; idFreq < 24; idFreq++) { + lW[idFreq] = -99; + } + if (trackFileVersion == "EU") { + if (bridgeId == 3 || bridgeId == 4) { + for (int idFreq = 0; idFreq < 24; idFreq++) { + lWBridge[idFreq] = getBridgeStructural(bridgeId, idFreq); + lW[idFreq] = roughnessLtot[idFreq] + lWBridge[idFreq] + 10 * Math.log10(axlesPerVeh); + } + } + } + + return lW; + } + + + + /** + * Roughness Level. + * linear interpolation wavelength to frequency + * @param typeVehicle vehicle data base + * @param trackRoughnessId track Roughness reference + * @param impactId impact reference + * @param speed impact reference + * @return Lroughness(freq) + **/ + private double[] getLWRoughness(String typeVehicle, int trackRoughnessId, int impactId, double speed, String trackFileVersion) { + + double[] roughnessTotLambda = new double[35]; + double[] roughnessLtot = new double[35]; + double[] contactFilter = new double[35]; + double[] lambdaToFreqLog = new double[35]; + double[] freqMedLog = new double[24]; + double[] Lambda = new double[35]; + + double m = 33; + for (int idLambda = 0; idLambda < 35; idLambda++) { + Lambda[idLambda] = Math.pow(10, m / 10); + lambdaToFreqLog[idLambda] = Math.log10(speed / Lambda[idLambda] * 1000 / 3.6); + + roughnessTotLambda[idLambda] = Math.pow(10, getLRoughness(typeVehicle, trackRoughnessId, trackFileVersion, idLambda) / 10); + if (impactId != 0) { + roughnessTotLambda[idLambda] = roughnessTotLambda[idLambda] + Math.pow(10, getImpactNoise(impactId, idLambda) / 10); + } + + contactFilter[idLambda] = getContactFilter(typeVehicle, idLambda); + roughnessLtot[idLambda] = 10 * Math.log10(roughnessTotLambda[idLambda]) + contactFilter[idLambda]; + roughnessLtot[idLambda] = Math.pow(10, roughnessLtot[idLambda] / 10); + m--; + } + for (int idFreqMed = 0; idFreqMed < 24; idFreqMed++) { + freqMedLog[idFreqMed] = Math.log10(Math.pow(10, (17 + Double.valueOf(idFreqMed)) / 10)); + } + + double[] roughnessLtotFreq = interpLinear(lambdaToFreqLog, roughnessLtot, freqMedLog); + + for (int idRoughnessLtotFreq = 0; idRoughnessLtotFreq < 24; idRoughnessLtotFreq++) { + roughnessLtotFreq[idRoughnessLtotFreq] = 10 * Math.log10(roughnessLtotFreq[idRoughnessLtotFreq]); + } + return roughnessLtotFreq; + } + +} + diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/cnossos/RailwayTrackCnossosParameters.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/cnossos/RailwayTrackCnossosParameters.java new file mode 100644 index 000000000..647da6e4f --- /dev/null +++ b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/cnossos/RailwayTrackCnossosParameters.java @@ -0,0 +1,108 @@ +/** + * NoiseModelling is a library capable of producing noise maps. It can be freely used either for research and education, as well as by experts in a professional use. + *

+ * NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. + *

+ * Official webpage : http://noise-planet.org/noisemodelling.html + * Contact: contact@noise-planet.org + */ + +package org.noise_planet.noisemodelling.emission.railway.cnossos; +/** + * Railway noise evaluation from Cnossos reference : COMMISSION DIRECTIVE (EU) 2015/996 + * of 19 May 2015 establishing common noise assessment methods according to Directive 2002/49/EC + * of the European Parliament and of the Council + * + * amending, for the purposes of adapting to scientific and technical progress, Annex II to + * Directive 2002/49/EC of the European Parliament and of the Council as regards + * common noise assessment methods + * + * part 2.3. Railway noise + * + * @author Adrien Le Bellec, Université Gustave Eiffel + * @author Olivier Chiello, Université Gustave Eiffel + */ + + +import org.noise_planet.noisemodelling.emission.railway.RailwayTrackParameters; + +/** + * Parameters Track + */ + +public class RailwayTrackCnossosParameters extends RailwayTrackParameters { + //set default value + private int trackTransfer; + private int railRoughness; + private int curvature; + private int impactNoise; + private int bridgeTransfert; + private String fileVersion = "FR"; // version of cnossos coefficient, if 2 == amendments 2019 + + public RailwayTrackCnossosParameters(double speedTrack, int trackTransfer, int railRoughness, int impactNoise, + int bridgeTransfert, int curvature, double speedCommercial, boolean isTunnel, int nTrack) { + + setSpeedTrack(speedTrack); + setSpeedCommercial(speedCommercial); + setIsTunnel(isTunnel); + setNTrack(nTrack); + setTrackTransfer(trackTransfer); + setRailRoughness(railRoughness); + setImpactNoise(impactNoise); + setCurvature(curvature); + setBridgeTransfert(bridgeTransfert); + + } + + + public String getFileVersion() { + return this.fileVersion; + } + + public void setFileVersion(String fileVersion) { + this.fileVersion = fileVersion; + } + + + public int getTrackTransfer() { + return trackTransfer; + } + + public void setTrackTransfer(int trackTransfer) { + this.trackTransfer = trackTransfer; + } + + public int getRailRoughness() { + return railRoughness; + } + + public void setRailRoughness(int railRoughness) { + this.railRoughness = railRoughness; + } + + public int getImpactNoise() { + return impactNoise; + } + + public void setImpactNoise(int impactNoise) { + this.impactNoise = impactNoise; + } + + public int getBridgeTransfert() { + return bridgeTransfert; + } + + public void setBridgeTransfert(int bridgeTransfert) { + this.bridgeTransfert = bridgeTransfert; + } + + public int getCurvature() { + return curvature; + } + + public void setCurvature(int curvature) { + this.curvature = curvature; + } + + +} diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/cnossos/RailwayVehicleCnossosParameters.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/cnossos/RailwayVehicleCnossosParameters.java new file mode 100644 index 000000000..66ad7deff --- /dev/null +++ b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/cnossos/RailwayVehicleCnossosParameters.java @@ -0,0 +1,72 @@ +/** + * NoiseModelling is a library capable of producing noise maps. It can be freely used either for research and education, as well as by experts in a professional use. + *

+ * NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. + *

+ * Official webpage : http://noise-planet.org/noisemodelling.html + * Contact: contact@noise-planet.org + */ + +package org.noise_planet.noisemodelling.emission.railway.cnossos; + +/** + * Railway noise evaluation from Cnossos reference : COMMISSION DIRECTIVE (EU) 2015/996 + * of 19 May 2015 establishing common noise assessment methods according to Directive 2002/49/EC + * of the European Parliament and of the Council + * + * amending, for the purposes of adapting to scientific and technical progress, Annex II to + * Directive 2002/49/EC of the European Parliament and of the Council as regards + * common noise assessment methods + * + * part 2.3. Railway noise + * + * @author Adrien Le Bellec, Université Gustave Eiffel + * @author Olivier Chiello, Université Gustave Eiffel + */ + +import org.noise_planet.noisemodelling.emission.railway.RailwayVehicleParameters; + +/** + * Parameters Vehicule + */ + +public class RailwayVehicleCnossosParameters extends RailwayVehicleParameters { + + // set default value + private int runningCondition = 0; // 0 = constand speed, 1 = acceleration , 2 =decceleration, 3 = idling + private double idlingTime = 0; // if idling, idling time (seconds) + private String fileVersion = "FR"; // version of cnossos coefficient, if 2 == amendments 2019 + + public RailwayVehicleCnossosParameters(String typeVehicle, double speedVehicle, double vehiclePerHour, int runningCondition, double idlingTime) { + setTypeVehicle(typeVehicle); + setSpeedVehicle(speedVehicle); + setVehiclePerHour(vehiclePerHour); + + setRunningCondition(runningCondition); + setIdlingTime(idlingTime); + } + + public String getFileVersion() { + return this.fileVersion; + } + + public void setFileVersion(String fileVersion) { + this.fileVersion = fileVersion; + } + + public int getRunningCondition() { + return runningCondition; + } + + public void setRunningCondition(int runningCondition) { + this.runningCondition = runningCondition; + } + + public double getIdlingTime() { + return idlingTime; + } + + public void setIdlingTime(double idlingTime) { + this.idlingTime = idlingTime; + } +} diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/RailWayLW.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/nmpb/RailWayNMPBParameters.java similarity index 69% rename from noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/RailWayLW.java rename to noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/nmpb/RailWayNMPBParameters.java index 3316fa4d9..37db8f24d 100644 --- a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/RailWayLW.java +++ b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/nmpb/RailWayNMPBParameters.java @@ -1,18 +1,15 @@ /** - * NoiseModelling is an open-source tool designed to produce environmental noise maps on very large urban areas. It can be used as a Java library or be controlled through a user friendly web interface. - * - * This version is developed by the DECIDE team from the Lab-STICC (CNRS) and by the Mixt Research Unit in Environmental Acoustics (Université Gustave Eiffel). - * - * + * NoiseModelling is a library capable of producing noise maps. It can be freely used either for research and education, as well as by experts in a professional use. + *

* NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. - * + *

+ * Official webpage : http://noise-planet.org/noisemodelling.html * Contact: contact@noise-planet.org - * */ -package org.noise_planet.noisemodelling.emission; +package org.noise_planet.noisemodelling.emission.railway.nmpb; /** - * Railway noise evaluation from Cnossos reference : COMMISSION DIRECTIVE (EU) 2015/996 + * Railway noise evaluation from NMPB reference : COMMISSION DIRECTIVE (EU) 2015/996 * of 19 May 2015 establishing common noise assessment methods according to Directive 2002/49/EC * of the European Parliament and of the Council * @@ -23,90 +20,46 @@ * part 2.3. Railway noise * * Return the dB value corresponding to the parameters - * @author Adrien Le Bellec - univ Gustave eiffel - * @author Olivier Chiello, Univ Gustave Eiffel + * @author Adrien Le Bellec, Université Gustave Eiffel + * @author Olivier Chiello, Université Gustave Eiffel */ +import org.noise_planet.noisemodelling.emission.directivity.DirectivitySphere; + import java.util.Arrays; -import static org.noise_planet.noisemodelling.emission.Utils.sumDbArray; +import static org.noise_planet.noisemodelling.emission.utils.Utils.sumDbArray; /** * Data result stockage */ -public class RailWayLW { - - public enum TrainNoiseSource { - ROLLING, - TRACTIONA, - TRACTIONB, - AERODYNAMICA, - AERODYNAMICB, - BRIDGE - } +public class RailWayNMPBParameters { /** * H_INDEX of noise source type (TrainNoiseSource) * 0 - Low height (0.5 m) A * 1 - High height (4 m) B */ - public static final int[] TRAIN_NOISE_SOURCE_H_INDEX = new int[] {0, 0, 1, 0, 1, 0}; - - public static final Integer[] DEFAULT_FREQUENCIES_THIRD_OCTAVE = new Integer[] {50, 63, 80, 100, 125, 160, 200, 250, 315, 400, 500, 630, 800, 1000, 1250, 1600, 2000, 2500, 3150, 4000, 5000, 6300, 8000, 10000}; - - private double[] lWRolling = new double[DEFAULT_FREQUENCIES_THIRD_OCTAVE.length];; - private double[] lWTractionA = new double[DEFAULT_FREQUENCIES_THIRD_OCTAVE.length];; - private double[] lWTractionB = new double[DEFAULT_FREQUENCIES_THIRD_OCTAVE.length];; - private double[] lWAerodynamicA = new double[DEFAULT_FREQUENCIES_THIRD_OCTAVE.length];; - private double[] lWAerodynamicB = new double[DEFAULT_FREQUENCIES_THIRD_OCTAVE.length];; - private double[] lWBridge = new double[DEFAULT_FREQUENCIES_THIRD_OCTAVE.length];; - - - public void setLWRolling(double[] LWRolling) { - this.lWRolling = LWRolling; - } - public void setLWTractionA(double[] LWTractionA) { - this.lWTractionA = LWTractionA; - } - public void setLWTractionB(double[] LWTractionB) { - this.lWTractionB = LWTractionB; - } - public void setLWAerodynamicA(double[] LWAerodynamicA) { - this.lWAerodynamicA = LWAerodynamicA; - } - public void setLWAerodynamicB(double[] LWAerodynamicB) { - this.lWAerodynamicB = LWAerodynamicB; - } - public void setLWBridge(double[] LWBridge) { - this.lWBridge = LWBridge; - } - - public double[] getLWRolling() { - return lWRolling; - } - public double[] getLWTractionA() { - return lWTractionA; - } - public double[] getLWTractionB() { - return lWTractionB; - } - public double[] getLWAerodynamicA() { - return lWAerodynamicA; - } - public double[] getLWAerodynamicB() { - return lWAerodynamicB; - } - public double[] getLWBridge() { - return lWBridge; - } - - public RailWayLW(){ - Arrays.fill(lWRolling,-99.99); - Arrays.fill(lWTractionA,-99.99); - Arrays.fill(lWTractionB,-99.99); - Arrays.fill(lWAerodynamicA,-99.99); - Arrays.fill(lWAerodynamicB,-99.99); - Arrays.fill(lWBridge,-99.99); + public static final int[] TRAIN_NOISE_SOURCE_H_INDEX = new int[]{0, 0, 1, 0, 1, 0}; + public static final Integer[] DEFAULT_FREQUENCIES_THIRD_OCTAVE = new Integer[]{50, 63, 80, 100, 125, 160, 200, 250, 315, 400, 500, 630, 800, 1000, 1250, 1600, 2000, 2500, 3150, 4000, 5000, 6300, 8000, 10000}; + private double[] lWRolling = new double[DEFAULT_FREQUENCIES_THIRD_OCTAVE.length]; + private double[] lWTractionA = new double[DEFAULT_FREQUENCIES_THIRD_OCTAVE.length]; + ; + private double[] lWTractionB = new double[DEFAULT_FREQUENCIES_THIRD_OCTAVE.length]; + ; + private double[] lWAerodynamicA = new double[DEFAULT_FREQUENCIES_THIRD_OCTAVE.length]; + ; + private double[] lWAerodynamicB = new double[DEFAULT_FREQUENCIES_THIRD_OCTAVE.length]; + ; + private double[] lWBridge = new double[DEFAULT_FREQUENCIES_THIRD_OCTAVE.length]; + ; + public RailWayNMPBParameters() { + Arrays.fill(lWRolling, -99.99); + Arrays.fill(lWTractionA, -99.99); + Arrays.fill(lWTractionB, -99.99); + Arrays.fill(lWAerodynamicA, -99.99); + Arrays.fill(lWAerodynamicB, -99.99); + Arrays.fill(lWBridge, -99.99); setLWRolling(lWRolling); setLWTractionA(lWTractionA); @@ -116,8 +69,10 @@ public RailWayLW(){ setLWBridge(lWBridge); } + ; + - public RailWayLW(double[] lWRolling, double[] lWTractionA, double[] lWTractionB, double[] lWAerodynamicA, double[] lWAerodynamicB, double[] lWBridge){ + public RailWayNMPBParameters(double[] lWRolling, double[] lWTractionA, double[] lWTractionB, double[] lWAerodynamicA, double[] lWAerodynamicB, double[] lWBridge) { setLWRolling(lWRolling); setLWTractionA(lWTractionA); setLWTractionB(lWTractionB); @@ -132,20 +87,19 @@ public RailWayLW(double[] lWRolling, double[] lWTractionA, double[] lWTractionB, * @param railWayLW2 Emission 2 * @return Merged level */ - public static RailWayLW sumRailWayLW(RailWayLW railWayLW1, RailWayLW railWayLW2){ - RailWayLW railWayLW = new RailWayLW(); + public static RailWayNMPBParameters sumRailWayLW(RailWayNMPBParameters railWayLW1, RailWayNMPBParameters railWayLW2) { + RailWayNMPBParameters railWayLW = new RailWayNMPBParameters(); - railWayLW.setLWRolling(sumDbArray(railWayLW1.getLWRolling() ,railWayLW2.getLWRolling()) ); - railWayLW.setLWAerodynamicA(sumDbArray(railWayLW1.getLWAerodynamicA() ,railWayLW2.getLWAerodynamicA()) ); - railWayLW.setLWAerodynamicB(sumDbArray(railWayLW1.getLWAerodynamicB() ,railWayLW2.getLWAerodynamicB()) ); - railWayLW.setLWBridge(sumDbArray(railWayLW1.getLWBridge() ,railWayLW2.getLWBridge()) ); - railWayLW.setLWTractionA(sumDbArray(railWayLW1.getLWTractionA() ,railWayLW2.getLWTractionA()) ); - railWayLW.setLWTractionB(sumDbArray(railWayLW1.getLWTractionB() ,railWayLW2.getLWTractionB()) ); + railWayLW.setLWRolling(sumDbArray(railWayLW1.getLWRolling(), railWayLW2.getLWRolling())); + railWayLW.setLWAerodynamicA(sumDbArray(railWayLW1.getLWAerodynamicA(), railWayLW2.getLWAerodynamicA())); + railWayLW.setLWAerodynamicB(sumDbArray(railWayLW1.getLWAerodynamicB(), railWayLW2.getLWAerodynamicB())); + railWayLW.setLWBridge(sumDbArray(railWayLW1.getLWBridge(), railWayLW2.getLWBridge())); + railWayLW.setLWTractionA(sumDbArray(railWayLW1.getLWTractionA(), railWayLW2.getLWTractionA())); + railWayLW.setLWTractionB(sumDbArray(railWayLW1.getLWTractionB(), railWayLW2.getLWTractionB())); return railWayLW; } - /** * Compute the attenuation for the specified noise source and parameters * @param noiseSource Noise source category @@ -155,7 +109,7 @@ public static RailWayLW sumRailWayLW(RailWayLW railWayLW1, RailWayLW railWayLW2) * @return Directional sound power */ public static Double getDirectionAttenuation(TrainNoiseSource noiseSource, double phi, double theta, double frequency) { - if(noiseSource == TrainNoiseSource.BRIDGE) { + if (noiseSource == TrainNoiseSource.BRIDGE) { return 0.0; } theta = Math.min(Math.max(theta, -(Math.PI / 2)), Math.PI / 2); @@ -163,21 +117,79 @@ public static Double getDirectionAttenuation(TrainNoiseSource noiseSource, doubl int height_index = TRAIN_NOISE_SOURCE_H_INDEX[noiseSource.ordinal()]; double attHorizontal = 10 * Math.log10(0.01 + 0.99 * Math.pow(Math.sin(phi), 2)); double attVertical = 0; - if(height_index == 0) { - if(theta > 0) { + if (height_index == 0) { + if (theta > 0) { attVertical = (40.0 / 3.0) * (2.0 / 3.0 * Math.sin(2 * theta) - Math.sin(theta)) * Math.log10((frequency + 600.0) / 200.0); } - } else if(height_index == 1 && noiseSource == TrainNoiseSource.AERODYNAMICB){// for aerodynamic effect only - if(theta < 0) { + } else if (height_index == 1 && noiseSource == TrainNoiseSource.AERODYNAMICB) {// for aerodynamic effect only + if (theta < 0) { attVertical = 10 * Math.log10(Math.pow(Math.cos(theta), 2)); } } return attHorizontal + attVertical; } - public static final class TrainAttenuation implements DirectionAttributes { + public double[] getLWRolling() { + return lWRolling; + } + + public void setLWRolling(double[] LWRolling) { + this.lWRolling = LWRolling; + } + + public double[] getLWTractionA() { + return lWTractionA; + } + + public void setLWTractionA(double[] LWTractionA) { + this.lWTractionA = LWTractionA; + } + + public double[] getLWTractionB() { + return lWTractionB; + } + + public void setLWTractionB(double[] LWTractionB) { + this.lWTractionB = LWTractionB; + } + + public double[] getLWAerodynamicA() { + return lWAerodynamicA; + } + + public void setLWAerodynamicA(double[] LWAerodynamicA) { + this.lWAerodynamicA = LWAerodynamicA; + } + + public double[] getLWAerodynamicB() { + return lWAerodynamicB; + } + + public void setLWAerodynamicB(double[] LWAerodynamicB) { + this.lWAerodynamicB = LWAerodynamicB; + } + + public double[] getLWBridge() { + return lWBridge; + } + + public void setLWBridge(double[] LWBridge) { + this.lWBridge = LWBridge; + } + + + public enum TrainNoiseSource { + ROLLING, + TRACTIONA, + TRACTIONB, + AERODYNAMICA, + AERODYNAMICB, + BRIDGE + } + + public static final class TrainAttenuation implements DirectivitySphere { TrainNoiseSource noiseSource; public TrainAttenuation(TrainNoiseSource noiseSource) { @@ -186,13 +198,13 @@ public TrainAttenuation(TrainNoiseSource noiseSource) { @Override public double getAttenuation(double frequency, double phi, double theta) { - return RailWayLW.getDirectionAttenuation(noiseSource, phi, theta, frequency); + return RailWayNMPBParameters.getDirectionAttenuation(noiseSource, phi, theta, frequency); } @Override public double[] getAttenuationArray(double[] frequencies, double phi, double theta) { double[] ret = new double[frequencies.length]; - for(int idFrequency = 0; idFrequency < frequencies.length; idFrequency++) { + for (int idFrequency = 0; idFrequency < frequencies.length; idFrequency++) { ret[idFrequency] = getAttenuation(frequencies[idFrequency], phi, theta); } return ret; diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/nmpb/RailwayNMPB.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/nmpb/RailwayNMPB.java new file mode 100644 index 000000000..523f4f46c --- /dev/null +++ b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/nmpb/RailwayNMPB.java @@ -0,0 +1,488 @@ +/** + * NoiseModelling is a library capable of producing noise maps. It can be freely used either for research and education, as well as by experts in a professional use. + *

+ * NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. + *

+ * Official webpage : http://noise-planet.org/noisemodelling.html + * Contact: contact@noise-planet.org + */ + +package org.noise_planet.noisemodelling.emission.railway.nmpb; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.NullNode; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Iterator; +import java.util.Locale; +import java.util.Map; + +import static java.lang.Math.min; +import static org.noise_planet.noisemodelling.emission.utils.interpLinear.interpLinear; + +/** + * Railway noise evaluation from NMPB reference : COMMISSION DIRECTIVE (EU) 2015/996 + * of 19 May 2015 establishing common noise assessment methods according to Directive 2002/49/EC + * of the European Parliament and of the Council + * + * amending, for the purposes of adapting to scientific and technical progress, Annex II to + * Directive 2002/49/EC of the European Parliament and of the Council as regards + * common noise assessment methods + * + * part 2.3. Railway noise + * + * Return the dB value corresponding to the parameters + * @author Adrien Le Bellec, Université Gustave Eiffel + * @author Olivier Chiello, Université Gustave Eiffel + */ + +public class RailwayNMPB { + private JsonNode NMPBRailWayData; + private JsonNode NMPBRailWayData2020; + private JsonNode NMPBRailWayDataSncf; + private JsonNode NMPBVehicleData; + private JsonNode NMPBTrainData; + + private static JsonNode parse(InputStream inputStream) { + try { + ObjectMapper mapper = new ObjectMapper(); + return mapper.readTree(inputStream); + } catch (IOException ex) { + return NullNode.getInstance(); + } + } + + public static Iterable iteratorToIterable(Iterator iterator) { + return () -> iterator; + } + + public void setEvaluateRailwaySourceNMPB(InputStream NMPBVehicleData, InputStream NMPBTrainData) { + this.NMPBVehicleData = parse(NMPBVehicleData); + this.NMPBTrainData = parse(NMPBTrainData); + } + + /** + * Get the NMPB coefficients from a specific file version (French have their own NMPB coefficients). + * @param fileVersion 1=RailwayNMPBEU_2020.json; other = RailwayNMPBSNCF_2021.json + * @return get the NMPB Coefficients + */ + public JsonNode getNMPBRailWayData(int fileVersion) { + if (fileVersion == 1) { + if (NMPBRailWayData2020 == null) { + NMPBRailWayData2020 = parse(RailwayNMPB.class.getResourceAsStream("RailwayNMPBEU_2020.json")); + } + return NMPBRailWayData2020; + } else if (fileVersion == 2) { + if (NMPBRailWayDataSncf == null) { + NMPBRailWayDataSncf = parse(RailwayNMPB.class.getResourceAsStream("RailwayNMPBSNCF_2021.json")); + } + return NMPBRailWayDataSncf; + } else { + if (NMPBRailWayData == null) { + NMPBRailWayData = parse(RailwayNMPB.class.getResourceAsStream("RailwayNMPBSNCF_2021.json")); + } + return NMPBRailWayData; + } + } + + public JsonNode getNMPBVehicleNode(String typeVehicle) { + JsonNode vehicle = getNMPBVehicleData().get(typeVehicle); + if (vehicle == null) { + throw new IllegalArgumentException(String.format("Vehicle %s not found must be one of :\n -%s", typeVehicle, + String.join("\n -", iteratorToIterable(getNMPBVehicleData().fieldNames())))); + } + return vehicle; + } + + /** + * Specific to French adaptation of the NMPB method + * Get the SNCF vehicles characteristics + * @return Coefficients related to the characteristics of SNCF vehicles + */ + public JsonNode getNMPBVehicleData() { + if (NMPBVehicleData == null) { + NMPBVehicleData = parse(RailwayNMPB.class.getResourceAsStream("RailwayVehiclesNMPB.json")); + } + return NMPBVehicleData; + } + + /** + * Specific to French adaptation of the NMPB method + * Get the SNCF composition of a train (one train can contains one or more vehicles) + * @return SNCF composition of a train + */ + public JsonNode getNMPBTrainData() { + if (NMPBTrainData == null) { + NMPBTrainData = parse(RailwayNMPB.class.getResourceAsStream("RailwayTrainsets.json")); + } + return NMPBTrainData; + } + + public Map getVehicleFromTrain(String trainName) { + Map vehicles = null; + for (Iterator> it = getNMPBTrainData().fields(); it.hasNext(); ) { + Map.Entry elt = it.next(); + if (trainName.equals(elt.getKey())) { + + ObjectMapper mapper = new ObjectMapper(); + vehicles = mapper.convertValue(elt.getValue(), new TypeReference>() { + }); + break; + } + } + return vehicles; + } + + + /** + * Find if a specific vehicle is in the Vehicle List + * @param vehicleName Name of a Vehicule + * @return true if in list + */ + public boolean isInVehicleList(String vehicleName) { + boolean inlist = false; + for (Iterator> it = getNMPBVehicleData().fields(); it.hasNext(); ) { + Map.Entry elt = it.next(); + if (vehicleName.equals(elt.getKey())) { + inlist = true; + break; + } + } + return inlist; + } + + public Double getLambdaValue(String typeVehicle, String refType, int spectreVer, int lambdaId) { // + int refId = getNMPBVehicleNode(typeVehicle).get(refType).intValue(); + String ref = ""; + if (refType.equals("RefRoughness")) { + ref = "WheelRoughness"; + } else if (refType.equals("RefContact")) { + ref = "ContactFilter"; + } + return getNMPBRailWayData(spectreVer).get("Vehicle").get(ref).get(String.valueOf(refId)).get("Values").get(lambdaId).doubleValue(); + } + + public Double getTrackRoughness(int trackRoughnessId, int spectreVer, int lambdaId) { // + return getNMPBRailWayData(spectreVer).get("Track").get("RailRoughness").get(String.valueOf(trackRoughnessId)).get("Values").get(lambdaId).doubleValue(); + } + + public double getAxlesPerVeh(String typeVehicle) { // + return getNMPBVehicleNode(typeVehicle).get("NbAxlePerVeh").doubleValue(); + } + + public int getNbCoach(String typeVehicle) { // + int nbCoach; + try { + nbCoach = getNMPBVehicleData().get(typeVehicle).get("NbCoach").intValue(); + } catch (Exception e) { + nbCoach = 1; + } + + return nbCoach; + } + + public double getSpectre(String typeVehicle, String ref, int runningCondition, String sourceHeight, int spectreVer, int freqId) { // + int refId = getNMPBVehicleNode(typeVehicle).get(ref).intValue(); + if (ref.equals("RefTraction")) { + double tractionSpectre = 0; + String condition = "ConstantSpeed"; + if (refId != 0) { + switch (runningCondition) { + case 0: + condition = "ConstantSpeed"; + break; + case 1: + condition = "AccelerationSpeed"; + break; + case 3: + condition = "DecelerationSpeed"; + break; + case 4: + condition = "IdlingSpeed"; + break; + } + try { + tractionSpectre = getNMPBRailWayData(spectreVer).get("Vehicle").get(condition).get(String.valueOf(refId)).get("Values").get(sourceHeight).get(freqId).doubleValue(); + } catch (NullPointerException ex) { + throw new IllegalArgumentException(String.format(Locale.ROOT, "Could not find traction spectrum for the following parameters " + + "getNMPBRailWayData(%d).get(\"Vehicle\").get(%s).get(String.valueOf" + + "(%d)).get(\"Values\").get(%s).get(%d)", spectreVer, condition, refId, sourceHeight, freqId)); + } + } + return tractionSpectre; + } else if (ref.equals("RefAerodynamic")) { + double aerodynamicNoise; + aerodynamicNoise = getNMPBRailWayData(spectreVer).get("Vehicle").get("AerodynamicNoise").get(String.valueOf(refId)).get("Values").get(sourceHeight).get(freqId).doubleValue(); + return aerodynamicNoise; + } else { + return 0; + } + } + + public double getAeroV0Alpha(String typeVehicle, String ref, int spectreVer, String aeroInf) { + int refId = getNMPBVehicleNode(typeVehicle).get(ref).intValue(); + return Double.parseDouble(getNMPBRailWayData(spectreVer).get("Vehicle").get("AerodynamicNoise").get(String.valueOf(refId)).get(aeroInf).asText()); + } + + public Double getBridgeStructural(int bridgeId, int spectreVer, int freqId) { + return getNMPBRailWayData(spectreVer).get("Track").get("BridgeConstant").get(String.valueOf(bridgeId)).get("Values").get(freqId).doubleValue(); + } + + public Double getTrackTransfer(int trackTransferId, int spectreVer, int freqId) { // + return getNMPBRailWayData(spectreVer).get("Track").get("TrackTransfer").get(String.valueOf(trackTransferId)).get("Spectre").get(freqId).doubleValue(); + } + + public Double getImpactNoise(int impactNoiseId, int spectreVer, int freqId) { // + return getNMPBRailWayData(spectreVer).get("Track").get("ImpactNoise").get(String.valueOf(impactNoiseId)).get("Values").get(freqId).doubleValue(); + } + + public Double getVehTransfer(String typeVehicle, int spectreVer, int freqId) { + int RefTransfer = getNMPBVehicleNode(typeVehicle).get("RefTransfer").intValue(); + return getNMPBRailWayData(spectreVer).get("Vehicle").get("Transfer").get(String.valueOf(RefTransfer)).get("Spectre").get(freqId).doubleValue(); + + } + + public Double getLRoughness(String typeVehicle, int trackRoughnessId, int spectreVer, int idLambda) { // + double wheelRoughness = getLambdaValue(typeVehicle, "RefRoughness", spectreVer, idLambda); + double trackRoughness = getTrackRoughness(trackRoughnessId, spectreVer, idLambda); + return 10 * Math.log10(Math.pow(10, wheelRoughness / 10) + Math.pow(10, trackRoughness / 10)); + } + + /** + * Check if it exists some NaN values in the Roughness sound level. + * They appear when calculating the roughness in the frequency domain by interpolating the roughness in the wavelength domain + * @param roughnessLtot + * @return + */ + private double[] checkNanValue(double[] roughnessLtot) { + int indice_NaN = 0; + for (int i = 0; i < 24; i++) { + if (Double.isNaN(roughnessLtot[i])) { + indice_NaN++; + } + } + for (int i = 0; i < indice_NaN; i++) { + roughnessLtot[i] = roughnessLtot[indice_NaN + 1]; + } + return roughnessLtot; + } + + /** + * Evaluate the sound level for one Vehicle + * @param vehicleParameters Vehicle Noise emission parameters + * @param trackParameters Track Noise emission parameters + * constant speed + * + * @return LWRoll / LWTraction A and B / LWAerodynamic A and B / LWBridge level in dB + **/ + public RailWayNMPBParameters evaluate(RailwayVehicleNMPBParameters vehicleParameters, RailwayTrackNMPBParameters trackParameters) throws IOException { + + final String fileVersion = "";//vehicleParameters.getFileVersion(); + + String typeVehicle = vehicleParameters.getTypeVehicle(); + double speedVehicle = vehicleParameters.getSpeedVehicle(); + double vehPerHour = vehicleParameters.getNumberVehicle(); + double axlesPerVeh = getAxlesPerVeh(typeVehicle); + int runningCondition = vehicleParameters.getRunningCondition(); + + double speedTrack = trackParameters.getSpeedTrack(); + double speedCommercial = trackParameters.getSpeedCommercial(); + int trackRoughnessId = trackParameters.getRailRoughness(); + int trackTransferId = trackParameters.getTrackTransfer(); + int impactId = trackParameters.getImpactNoise(); + int bridgeId = trackParameters.getBridgeTransfert(); + int curvature = trackParameters.getCurvature(); + + // get speed of the vehicle + double speed = min(speedVehicle, min(speedTrack, speedCommercial)); + + boolean isTunnel = trackParameters.getIsTunnel(); + // %% Take into account the number of coach and the number of units + // 10*log10(NbUnit*NbCoach); + + + // if (isTunnel) { + double[] lWSpectre = new double[24]; + for (int idFreq = 0; idFreq < 24; idFreq++) { + lWSpectre[idFreq] = -99; + } + RailWayNMPBParameters lWRailWay = new RailWayNMPBParameters(lWSpectre, lWSpectre, lWSpectre, lWSpectre, lWSpectre, lWSpectre); + return lWRailWay; + // } else { + /* + // Rolling noise calcul + double[] lWRolling = evaluateLWroughness("Rolling", typeVehicle, trackRoughnessId, impactId, bridgeId, curvature, speed, trackTransferId, spectreVer, axlesPerVeh); + // Traction noise calcul + double[] lWTractionA = evaluateLWSpectre(typeVehicle, "RefTraction", runningCondition, speed, 0, spectreVer); + double[] lWTractionB = evaluateLWSpectre(typeVehicle, "RefTraction", runningCondition, speed, 1, spectreVer); + // Aerodynamic noise calcul + double[] lWAerodynamicA = evaluateLWSpectre(typeVehicle, "RefAerodynamic", runningCondition, speed, 0, spectreVer); + double[] lWAerodynamicB = evaluateLWSpectre(typeVehicle, "RefAerodynamic", runningCondition, speed, 1, spectreVer); + // Bridge noise calcul + double[] lWBridge = evaluateLWroughness("Bridge", typeVehicle, trackRoughnessId, impactId, bridgeId, curvature, speed, trackTransferId, spectreVer, axlesPerVeh); + + for (int i = 0; i < lWRolling.length; i++) { + lWRolling[i] = Vperhour2NoiseLevel(lWRolling[i], vehPerHour * getNbCoach(typeVehicle), speed); + lWTractionA[i] = Vperhour2NoiseLevel(lWTractionA[i], vehPerHour * getNbCoach(typeVehicle), speed); + lWTractionB[i] = Vperhour2NoiseLevel(lWTractionB[i], vehPerHour * getNbCoach(typeVehicle), speed); + lWAerodynamicA[i] = Vperhour2NoiseLevel(lWAerodynamicA[i], vehPerHour * getNbCoach(typeVehicle), speed); + lWAerodynamicB[i] = Vperhour2NoiseLevel(lWAerodynamicB[i], vehPerHour * getNbCoach(typeVehicle), speed); + lWBridge[i] = Vperhour2NoiseLevel(lWBridge[i], vehPerHour * getNbCoach(typeVehicle), speed); + } + + RailWayNMPBParameters lWRailWay = new RailWayNMPBParameters(lWRolling, lWTractionA, lWTractionB, lWAerodynamicA, lWAerodynamicB, lWBridge); + return lWRailWay; */ + // } + } + + /** + * traction or Aerodynamic Level. + * @param typeVehicle vehicle data base + * @param ref "Traction" "Aerodynamic" + * @param speed min speed between vehicle and track + * @param height height source + * @return lWSpectre(freq) (Traction or Aerodynamic) + **/ + private double[] evaluateLWSpectre(String typeVehicle, String ref, int runningCondition, double speed, int height, int spectreVer) { + double[] lWSpectre = new double[24]; + + for (int idFreq = 0; idFreq < 24; idFreq++) { + if (!ref.equals("RefAerodynamic")) { + if (height == 0) { + lWSpectre[idFreq] = getSpectre(typeVehicle, ref, runningCondition, "A", spectreVer, idFreq); + } else if (height == 1) { + lWSpectre[idFreq] = getSpectre(typeVehicle, ref, runningCondition, "B", spectreVer, idFreq); + } + } else { + int refId = getNMPBVehicleNode(typeVehicle).get(ref).intValue(); + if (speed < 200 || refId == 0) { + lWSpectre[idFreq] = -99; + } else { + if (height == 0) { + lWSpectre[idFreq] = getSpectre(typeVehicle, ref, runningCondition, "A", spectreVer, idFreq); + } else if (height == 1) { + lWSpectre[idFreq] = getSpectre(typeVehicle, ref, runningCondition, "B", spectreVer, idFreq); + } + double v0Aero = getAeroV0Alpha(typeVehicle, ref, spectreVer, "V0"); + double alphaAero = getAeroV0Alpha(typeVehicle, ref, spectreVer, "Alpha"); + lWSpectre[idFreq] = lWSpectre[idFreq] + alphaAero * Math.log10(speed / v0Aero); + } + } + } + return lWSpectre; + } + + /** + * Rolling Level. + * @param typeVehicle vehicle data base + * @param trackRoughnessId track Roughness reference + * @param impactId impact reference + * @param speed min speed between vehicle and track + * + * Step 1 + * wavelength to frequecy (evaluateRoughnessLtotFreq) + * Step 2 + * calcul sound power of wheel and bogie emission + * calcul sound power of rail sleeper and ballast/slab emission + * todo add sound power of superstructure emission ? + * + * @return lWRoll(freq) + **/ + + private double[] evaluateLWroughness(String ref, String typeVehicle, int trackRoughnessId, int impactId, int bridgeId, int curvature, double speed, int trackTransferId, int spectreVer, double axlesPerVeh) { + double[] trackTransfer = new double[24]; + double[] lWTr = new double[24]; + double[] vehTransfer = new double[24]; + double[] lWVeh = new double[24]; + double[] lW = new double[24]; + + // roughnessLtot = NMPB p.19 (2.3.7) + double[] roughnessLtot = checkNanValue(evaluateRoughnessLtotFreq(typeVehicle, trackRoughnessId, impactId, speed, spectreVer)); + if (ref.equals("Rolling")) { + for (int idFreq = 0; idFreq < 24; idFreq++) { + // lWTr = NMPB p.20 (2.3.8) + trackTransfer[idFreq] = getTrackTransfer(trackTransferId, spectreVer, idFreq); + lWTr[idFreq] = roughnessLtot[idFreq] + trackTransfer[idFreq] + 10 * Math.log10(axlesPerVeh); + + // lWVeh = NMPB p.20 (2.3.9) + vehTransfer[idFreq] = getVehTransfer(typeVehicle, spectreVer, idFreq); + lWVeh[idFreq] = roughnessLtot[idFreq] + vehTransfer[idFreq] + 10 * Math.log10(axlesPerVeh); + // lWRoll = NMPB p.19 (2.3.7) + lW[idFreq] = 10 * Math.log10(Math.pow(10, lWTr[idFreq] / 10) + Math.pow(10, lWVeh[idFreq] / 10)); + if (curvature == 1) { + lW[idFreq] = lW[idFreq] + 5; + } else if (curvature == 2) { + lW[idFreq] = lW[idFreq] + 8; + } else if (curvature == 3) { + lW[idFreq] = lW[idFreq] + 8; + } + } + } else if (ref.equals("Bridge")) { + double[] lWBridge = new double[24]; + for (int idFreq = 0; idFreq < 24; idFreq++) { + lW[idFreq] = -99; + } + if (spectreVer == 1) { + if (bridgeId == 3 || bridgeId == 4) { + for (int idFreq = 0; idFreq < 24; idFreq++) { + lWBridge[idFreq] = getBridgeStructural(bridgeId, spectreVer, idFreq); + lW[idFreq] = roughnessLtot[idFreq] + lWBridge[idFreq] + 10 * Math.log10(axlesPerVeh); + } + } + } + } + return lW; + } + + /** + * Roughness Level. + * linear interpolation wavelength to frequency + * @param typeVehicle vehicle data base + * @param trackRoughnessId track Roughness reference + * @param impactId impact reference + * @param speed impact reference + * @return Lroughness(freq) + **/ + private double[] evaluateRoughnessLtotFreq(String typeVehicle, int trackRoughnessId, int impactId, double speed, int spectreVer) { + + double[] roughnessTotLambda = new double[35]; + double[] roughnessLtot = new double[35]; + double[] contactFilter = new double[35]; + double[] lambdaToFreqLog = new double[35]; + double[] freqMedLog = new double[24]; + double[] Lambda = new double[35]; + + double m = 33; + for (int idLambda = 0; idLambda < 35; idLambda++) { + Lambda[idLambda] = Math.pow(10, m / 10); + lambdaToFreqLog[idLambda] = Math.log10(speed / Lambda[idLambda] * 1000 / 3.6); + + roughnessTotLambda[idLambda] = Math.pow(10, getLRoughness(typeVehicle, trackRoughnessId, spectreVer, idLambda) / 10); + if (impactId != 0) { + roughnessTotLambda[idLambda] = roughnessTotLambda[idLambda] + Math.pow(10, getImpactNoise(impactId, spectreVer, idLambda) / 10); + } + + contactFilter[idLambda] = getLambdaValue(typeVehicle, "RefContact", spectreVer, idLambda); + roughnessLtot[idLambda] = 10 * Math.log10(roughnessTotLambda[idLambda]) + contactFilter[idLambda]; + roughnessLtot[idLambda] = Math.pow(10, roughnessLtot[idLambda] / 10); + m--; + } + for (int idFreqMed = 0; idFreqMed < 24; idFreqMed++) { + freqMedLog[idFreqMed] = Math.log10(Math.pow(10, (17 + Double.valueOf(idFreqMed)) / 10)); + } + + double[] roughnessLtotFreq = interpLinear(lambdaToFreqLog, roughnessLtot, freqMedLog); + + + for (int idRoughnessLtotFreq = 0; idRoughnessLtotFreq < 24; idRoughnessLtotFreq++) { + roughnessLtotFreq[idRoughnessLtotFreq] = 10 * Math.log10(roughnessLtotFreq[idRoughnessLtotFreq]); + } + return roughnessLtotFreq; + } + +} + + diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/RailwayTrackParametersCnossos.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/nmpb/RailwayTrackNMPBParameters.java similarity index 73% rename from noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/RailwayTrackParametersCnossos.java rename to noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/nmpb/RailwayTrackNMPBParameters.java index 373a1014c..6254d3af9 100644 --- a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/RailwayTrackParametersCnossos.java +++ b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/nmpb/RailwayTrackNMPBParameters.java @@ -1,18 +1,15 @@ /** - * NoiseModelling is an open-source tool designed to produce environmental noise maps on very large urban areas. It can be used as a Java library or be controlled through a user friendly web interface. - * - * This version is developed by the DECIDE team from the Lab-STICC (CNRS) and by the Mixt Research Unit in Environmental Acoustics (Université Gustave Eiffel). - * - * + * NoiseModelling is a library capable of producing noise maps. It can be freely used either for research and education, as well as by experts in a professional use. + *

* NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. - * + *

+ * Official webpage : http://noise-planet.org/noisemodelling.html * Contact: contact@noise-planet.org - * */ -package org.noise_planet.noisemodelling.emission; +package org.noise_planet.noisemodelling.emission.railway.nmpb; /** - * Railway noise evaluation from Cnossos reference : COMMISSION DIRECTIVE (EU) 2015/996 + * Railway noise evaluation from NMPB reference : COMMISSION DIRECTIVE (EU) 2015/996 * of 19 May 2015 establishing common noise assessment methods according to Directive 2002/49/EC * of the European Parliament and of the Council * @@ -22,16 +19,16 @@ * * part 2.3. Railway noise * - * @author Adrien Le Bellec - univ Gustave eiffel - * @author Olivier Chiello, Univ Gustave Eiffel + * @author Adrien Le Bellec, Université Gustave Eiffel + * @author Olivier Chiello, Université Gustave Eiffel */ /** - * DataBase Track + * Parameters Track */ -public class RailwayTrackParametersCnossos { +public class RailwayTrackNMPBParameters { //set default value private double speedTrack; // maximum speed on the track (km/h) private int trackTransfer; @@ -42,15 +39,31 @@ public class RailwayTrackParametersCnossos { private double speedCommercial; // commercial speed on the track (km/h) private int nTrack; private boolean isTunnel; + private int spectreVer = 2; // version of NMPB coefficient, if 2 == amendments 2019 + + public RailwayTrackNMPBParameters(double speedTrack, int trackTransfer, int railRoughness, int impactNoise, + int bridgeTransfert, int curvature, double speedCommercial, boolean isTunnel, int nTrack) { + + setSpeedTrack(speedTrack); + setTrackTransfer(trackTransfer); + setRailRoughness(railRoughness); + setImpactNoise(impactNoise); + setCurvature(curvature); + setBridgeTransfert(bridgeTransfert); + setSpeedCommercial(speedCommercial); + setIsTunnel(isTunnel); + setNTrack(nTrack); - public void setIsTunnel(boolean tunnel) { - isTunnel = tunnel; } public boolean getIsTunnel() { return isTunnel; } + public void setIsTunnel(boolean tunnel) { + isTunnel = tunnel; + } + public double getNTrack() { return nTrack; } @@ -59,74 +72,67 @@ public void setNTrack(int nTrack) { this.nTrack = nTrack; } - - - private int spectreVer = 2; // version of cnossos coefficient, if 2 == amendments 2019 + public int getSpectreVer() { + return this.spectreVer; + } public void setSpectreVer(int spectreVer) { this.spectreVer = spectreVer; } + public double getSpeedTrack() { + return speedTrack; + } + public void setSpeedTrack(double speedTrack) { this.speedTrack = speedTrack; } + + public int getTrackTransfer() { + return trackTransfer; + } + public void setTrackTransfer(int trackTransfer) { this.trackTransfer = trackTransfer; } + + public int getRailRoughness() { + return railRoughness; + } + public void setRailRoughness(int railRoughness) { this.railRoughness = railRoughness; } - public void setCurvature(int curvature) { - this.curvature = curvature; + + public int getImpactNoise() { + return impactNoise; } + public void setImpactNoise(int impactNoise) { this.impactNoise = impactNoise; } - public void setBridgeTransfert(int bridgeTransfert) { - this.bridgeTransfert = bridgeTransfert; - } - public void setSpeedCommercial(double speedCommercial) { - this.speedCommercial = speedCommercial; - } - public int getSpectreVer() { - return this.spectreVer; - } - - public double getSpeedTrack() { - return speedTrack; - } - public int getTrackTransfer() { - return trackTransfer; - } - public int getRailRoughness() { - return railRoughness; - } - public int getImpactNoise() { - return impactNoise; - } public int getBridgeTransfert() { return bridgeTransfert; } + + public void setBridgeTransfert(int bridgeTransfert) { + this.bridgeTransfert = bridgeTransfert; + } + public int getCurvature() { return curvature; } + + public void setCurvature(int curvature) { + this.curvature = curvature; + } + public double getSpeedCommercial() { return speedCommercial; } - public RailwayTrackParametersCnossos(double speedTrack, int trackTransfer, int railRoughness, int impactNoise, - int bridgeTransfert, int curvature, double speedCommercial, boolean isTunnel, int nTrack ) { - - setSpeedTrack(speedTrack); - setTrackTransfer(trackTransfer); - setRailRoughness(railRoughness); - setImpactNoise(impactNoise); - setCurvature(curvature); - setBridgeTransfert(bridgeTransfert); - setSpeedCommercial(speedCommercial); - setIsTunnel(isTunnel); - setNTrack(nTrack); - + public void setSpeedCommercial(double speedCommercial) { + this.speedCommercial = speedCommercial; } } diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/RailwayVehicleParametersCnossos.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/nmpb/RailwayVehicleNMPBParameters.java similarity index 60% rename from noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/RailwayVehicleParametersCnossos.java rename to noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/nmpb/RailwayVehicleNMPBParameters.java index eee0499e7..a2e30be84 100644 --- a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/RailwayVehicleParametersCnossos.java +++ b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/nmpb/RailwayVehicleNMPBParameters.java @@ -1,19 +1,16 @@ /** - * NoiseModelling is an open-source tool designed to produce environmental noise maps on very large urban areas. It can be used as a Java library or be controlled through a user friendly web interface. - * - * This version is developed by the DECIDE team from the Lab-STICC (CNRS) and by the Mixt Research Unit in Environmental Acoustics (Université Gustave Eiffel). - * - * + * NoiseModelling is a library capable of producing noise maps. It can be freely used either for research and education, as well as by experts in a professional use. + *

* NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. - * + *

+ * Official webpage : http://noise-planet.org/noisemodelling.html * Contact: contact@noise-planet.org - * */ -package org.noise_planet.noisemodelling.emission; +package org.noise_planet.noisemodelling.emission.railway.nmpb; /** - * Railway noise evaluation from Cnossos reference : COMMISSION DIRECTIVE (EU) 2015/996 + * Railway noise evaluation from NMPB reference : COMMISSION DIRECTIVE (EU) 2015/996 * of 19 May 2015 establishing common noise assessment methods according to Directive 2002/49/EC * of the European Parliament and of the Council * @@ -23,76 +20,82 @@ * * part 2.3. Railway noise * - * @author Adrien Le Bellec - univ Gustave eiffel - * @author Olivier Chiello, Univ Gustave Eiffel + * @author Adrien Le Bellec, Université Gustave Eiffel + * @author Olivier Chiello, Université Gustave Eiffel */ /** - * DataBase Vehicule + * Parameters Vehicule */ -public class RailwayVehicleParametersCnossos { +public class RailwayVehicleNMPBParameters { // set default value - private String typeVehicle=""; // name of the vehicles + private String typeVehicle = ""; // name of the vehicles private double speedVehicle; // speed of the vehicles (km/h) private double vehiclePerHour = 1; // Average light vehicle per hour - private int runningCondition=0; // 0 = constand speed, 1 = acceleration , 2 =decceleration, 3 = idling - private double idlingTime=0; // if idling, idling time (seconds) + private int runningCondition = 0; // 0 = constand speed, 1 = acceleration , 2 =decceleration, 3 = idling + private double idlingTime = 0; // if idling, idling time (seconds) - private int spectreVer = 2; // version of cnossos coefficient, if 1 == amendments 2020 if 2 == 2021 SNCF + private int spectreVer = 2; // version of NMPB coefficient, if 1 == amendments 2020 if 2 == 2021 SNCF - public void setSpectreVer(int spectreVer) { - this.spectreVer = spectreVer; + public RailwayVehicleNMPBParameters(String typeVehicle, double speedVehicle, double vehiclePerHour, int runningCondition, double idlingTime) { + + + setTypeVehicle(typeVehicle); + setSpeedVehicle(speedVehicle); + setVehiclePerHour(vehiclePerHour); + + setRunningCondition(runningCondition); + setIdlingTime(idlingTime); } + public int getSpectreVer() { return this.spectreVer; } - - public void setTypeVehicle(String typeVehicle) { - this.typeVehicle = typeVehicle; - } - public void setSpeedVehicle(double speedVehicle) { - this.speedVehicle = speedVehicle; + public void setSpectreVer(int spectreVer) { + this.spectreVer = spectreVer; } + public void setVehiclePerHour(double vehiclePerHour) { this.vehiclePerHour = vehiclePerHour; } - public void setRunningCondition(int runningCondition) { - this.runningCondition = runningCondition; - } - public void setIdlingTime(double idlingTime) { - this.idlingTime = idlingTime; - } - public String getTypeVehicle() { return typeVehicle; } + + public void setTypeVehicle(String typeVehicle) { + this.typeVehicle = typeVehicle; + } + public double getSpeedVehicle() { return speedVehicle; } + + public void setSpeedVehicle(double speedVehicle) { + this.speedVehicle = speedVehicle; + } + public double getNumberVehicle() { - return vehiclePerHour ; + return vehiclePerHour; } - public int getRunningCondition( ) { + public int getRunningCondition() { return runningCondition; } + + public void setRunningCondition(int runningCondition) { + this.runningCondition = runningCondition; + } + public double getIdlingTime() { return idlingTime; } - public RailwayVehicleParametersCnossos(String typeVehicle, double speedVehicle, double vehiclePerHour, int runningCondition, double idlingTime) { - - - setTypeVehicle(typeVehicle); - setSpeedVehicle(speedVehicle); - setVehiclePerHour(vehiclePerHour); - - setRunningCondition(runningCondition); - setIdlingTime(idlingTime); + public void setIdlingTime(double idlingTime) { + this.idlingTime = idlingTime; } } diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/schall03/TramwaySchall03.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/schall03/TramwaySchall03.java new file mode 100644 index 000000000..0eda377b1 --- /dev/null +++ b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/railway/schall03/TramwaySchall03.java @@ -0,0 +1,69 @@ +/** + * NoiseModelling is a library capable of producing noise maps. It can be freely used either for research and education, as well as by experts in a professional use. + *

+ * NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. + *

+ * Official webpage : http://noise-planet.org/noisemodelling.html + * Contact: contact@noise-planet.org + */ + +package org.noise_planet.noisemodelling.emission.railway.schall03; + +/** + * Compute sound emission levels of tramway sound source + * The proposed model is a very simplified version, inspired by : + * Moehler, U.; Liepert, M.; Kurze, U.J.; Onnich, H. The new German prediction model for railway noise 'Schall 03 2006'. In Noise and Vibration Mitigation for Rail Transportation Systems; Springer: Berlin, Germany, 2008; pp. 186–192. + * + * @author Nicolas Fortin, Université Gustave Eiffel + */ + +public class TramwaySchall03 { + + // these factors are extracted from German directive Schall 03 + public static final double grass_a_factor = 26.; + public static final double rigid_a_factor = 26.; + public static final double grass_b_factor = 75.; + public static final double rigid_b_factor = 78.; + public static final double speed_reference = 40.; + /** Utility class */ + private TramwaySchall03() { + } + + /** + * Evaluation of Tramway sound source + * @param speed Average tramway speed + * @param tw_per_hour Average tramway count per hour + * @param ground_type Ground category + * @param has_anti_vibration True if rails lies on anti-vibration system + * @return Value in dB(A) + */ + public static double evaluate(final double speed, final double tw_per_hour, final GROUND_TYPE ground_type, + boolean has_anti_vibration) { + final double a_factor, b_factor; + switch (ground_type) { + case GRASS: + a_factor = grass_a_factor; + b_factor = grass_b_factor; + break; + case RIGID: + a_factor = rigid_a_factor; + b_factor = rigid_b_factor; + break; + default: + throw new IllegalArgumentException("Unknown ground type"); + } + + double delta_corr = 0; + if (has_anti_vibration) { + delta_corr += -2; + } + + return a_factor * Math.log10(speed / speed_reference) + + b_factor + + delta_corr + + Math.log10(tw_per_hour); + } + + + public enum GROUND_TYPE {GRASS, RIGID} +} \ No newline at end of file diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/road/cnossos/RoadCnossos.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/road/cnossos/RoadCnossos.java new file mode 100644 index 000000000..ba491a599 --- /dev/null +++ b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/road/cnossos/RoadCnossos.java @@ -0,0 +1,410 @@ +/** + * NoiseModelling is a library capable of producing noise maps. It can be freely used either for research and education, as well as by experts in a professional use. + *

+ * NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. + *

+ * Official webpage : http://noise-planet.org/noisemodelling.html + * Contact: contact@noise-planet.org + */ + +package org.noise_planet.noisemodelling.emission.road.cnossos; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.NullNode; + +import java.io.IOException; +import java.io.InputStream; + +import static org.noise_planet.noisemodelling.emission.utils.Utils.*; + +/** + * Compute the emission sound level of a road segment in dB/m + * Reference document is "Commission Directive (EU) 2015/996 of 19 May 2015 establishing common noise assessment methods according to Directive 2002/49/EC of the European Parliament and of the Council (Text with EEA relevance)" 2015 + * including its 2020 amendments + * https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=OJ:JOL_2015_168_R_0001 for 2015 version + * https://eur-lex.europa.eu/legal-content/GA/TXT/?uri=CELEX:32020L0367 for amendments + * @author Nicolas Fortin, Université Gustave Eiffel + * @author Pierre Aumond, Université Gustave Eiffel + */ + +public class RoadCnossos { + private static JsonNode RoadCnossos_2015 = parse(RoadCnossos.class.getResourceAsStream("RoadCnossos_2015.json")); // old coefficients in 2015 amendments + private static JsonNode cnossosData2020 =parse(RoadCnossos.class.getResourceAsStream("RoadCnossos_2020.json")); // new coefficients in 2020 amendments + + private static JsonNode parse(InputStream inputStream) { + try { + ObjectMapper mapper = new ObjectMapper(); + return mapper.readTree(inputStream); + } catch (IOException ex) { + return NullNode.getInstance(); + } + } + + /** + * Get the CNOSSOS coefficients from a specific file version. + * @param fileVersion 1=RailwayCnossosEU_2020.json; other = RailwayCnossosSNCF_2021.json + * @return + */ + public static JsonNode getCnossosData(int fileVersion) { + if (fileVersion == 1) { + return RoadCnossos_2015; // old coefficients in 2015 amendments + } else { + return cnossosData2020; // new coefficients in 2020 amendments + } + } + + /** + * Get "a" road surface coefficient (also called spectrum) for a frequency value + * @param Freq Frequency in Hz (octave band) + * @param vehCat Vehicle category (1,2,3,4a,4b,5) + * @param roadSurface Road surface identifier - The list is given in the following file : src/main/resources/org/noise_planet/noisemodelling/emission/RoadCnossos_2020.json + * search for NL01 or FR_R2 for example + * @param fileVersion 2015 or 2019 coefficients version + * @return a Road Coeff + */ + public static Double getA_RoadSurfaceCoeff(int Freq, String vehCat, String roadSurface, int fileVersion) throws IOException { + int Freq_ind; + switch (Freq) { + case 63: + Freq_ind = 0; + break; + case 125: + Freq_ind = 1; + break; + case 250: + Freq_ind = 2; + break; + case 500: + Freq_ind = 3; + break; + case 1000: + Freq_ind = 4; + break; + case 2000: + Freq_ind = 5; + break; + case 4000: + Freq_ind = 6; + break; + case 8000: + Freq_ind = 7; + break; + default: + Freq_ind = 0; + } + if (getCnossosData(fileVersion).get("roads").get(roadSurface)==null) throw new IOException("Error : the pavement "+roadSurface + " doesn't exist in the database."); + return getCnossosData(fileVersion).get("roads").get(roadSurface).get("ref").get(vehCat).get("spectrum").get(Freq_ind).doubleValue(); + } + + /** + * Get "b" road surface coefficient (also called ßm) for a frequency value + * @param vehCat Vehicle category (1,2,3,4a,4b,5) + * @param roadSurface Road surface identifier - The list is given in the following file : src/main/resources/org/noise_planet/noisemodelling/emission/RoadCnossos_2020.json + * search for NL01 or FR_R2 for example + * @param fileVersion 2015 or 2019 coefficients version + * @return a Road Coeff + */ + public static Double getB_RoadSurfaceCoeff(String vehCat, String roadSurface, int fileVersion) { //CNOSSOS-EU_Road_Catalogue_Final - 01April2014.xlsx - https://circabc.europa.eu/webdav/CircaBC/env/noisedir/Library/Public/cnossos-eu/Final_methods%26software + return getCnossosData(fileVersion).get("roads").get(roadSurface).get("ref").get(vehCat).get("ßm").doubleValue(); + } + + /** + * Get "Cr" coefficient related to the decrease in rolling noise near an intersection (due to deceleration and acceleration phases). + * @param vehCat Vehicle category (1,2,3,4a,4b,5) + * @param k k=1 Crossing lights, k=2 roundabout + * @param fileVersion 2015 or 2019 coefficients version + * @return Cr coefficient + */ + public static double getCr(String vehCat, int k, int fileVersion) { + return getCnossosData(fileVersion).get("vehicles").get(vehCat).get(k == 1 ? "crossing" : "roundabout").get("cr").doubleValue(); + } + + /** + * Get "Cp" coefficient related to the increase in propulsion noise near an intersection (due to deceleration and acceleration phases). + * @param vehCat Vehicle category + * @param k k=1 Crossing lights, k=2 roundabout + * @param fileVersion 2015 or 2019 coefficients version + * @return Cp coefficient + */ + public static double getCp(String vehCat, int k, int fileVersion) { + return getCnossosData(fileVersion).get("vehicles").get(vehCat).get(k == 1 ? "crossing" : "roundabout").get("cp").doubleValue(); + } + + /** + * get vehicle emission values coefficients + * @param coeff ar,br,ap,bp,a,b (ar, br, rolling noise / ap,bp, propulsion noise / a,b, studded tyres) + * @param freq Frequency in Hz (octave band) + * @param vehicleCategory 1,2,3,4a,4b.. + * @return Vehicle emission values coefficients + */ + public static Double getCoeff(String coeff, int freq, String vehicleCategory, int coeffVer) { + int Freq_ind; + switch (freq) { + case 63: + Freq_ind = 0; + break; + case 125: + Freq_ind = 1; + break; + case 250: + Freq_ind = 2; + break; + case 500: + Freq_ind = 3; + break; + case 1000: + Freq_ind = 4; + break; + case 2000: + Freq_ind = 5; + break; + case 4000: + Freq_ind = 6; + break; + case 8000: + Freq_ind = 7; + break; + default: + Freq_ind = 0; + } + return getCnossosData(coeffVer).get("vehicles").get(vehicleCategory).get(coeff).get(Freq_ind).doubleValue(); + } + + /** + * Get rolling or motor sound level in dB at a specific speed + * @param base coeff A + * @param adj coeff B + * @param speed vm in km/h + * @param speedBase vref in km/h + * @return + */ + public static Double getNoiseLvl(double base, double adj, double speed, + double speedBase) { + return base + adj * Math.log10(speed / speedBase); + } + + /** + * Correction for studded tyres - Eq. 2.2.6 + * only for light vehicles + * if speed is over 50 km/h or below 90 km/h the correction is limited. + * @param roadCnossosParameters every others parameters linked to RoadCnossosParameters class (e.g. speed on the road segment) + * @param Pm_stud proportion of vehicle equipped of studded tyres + * @param Ts_stud number of months they are equipped with studded tires + * @param freq Frequency in Hz (octave band) + * @param fileVersion + * @return + */ + private static Double getDeltaStuddedTyres(RoadCnossosParameters roadCnossosParameters, double Pm_stud, double Ts_stud, + int freq, int fileVersion, double vRef) throws IOException { + double speed = roadCnossosParameters.getSpeedLv(); + double ps = Pm_stud * Ts_stud / 12; // Eq. 2.2.7 yearly average proportion of vehicles equipped with studded tyres + speed = (speed >= 90) ? 90 : speed; + speed = (speed <= 50) ? 50 : speed; + double deltastud = getNoiseLvl(getCoeff("a", freq, "1", fileVersion), getCoeff("b", freq, "1", fileVersion), speed, vRef); + return 10 * Math.log10((1 - ps) + ps * Math.pow(10, deltastud / 10)); // Eq. 2.2.8 + // Only for light vehicles (Eq.2.2.9) + } + + /** + * Get the correction due to the air temperature + * @param Temperature temperature in °C + * @param vehicleCategory 1,2,3,4a,4b.. + * @return + */ + private static Double getDeltaTemperature(double Temperature, String vehicleCategory) { + double K = 0.08; + double tempRef = 20; + switch (vehicleCategory) { + case "1": + K = 0.08; + break; + case "2": + K = 0.04; + break; + case "3": + K = 0.04; + break; + } + + return K * (tempRef - Temperature); + } + + /** + * Get the correction due to the slope + * Effects on vehicles 1,2 or 3 (light, medium and heavy vehicles) + * @param roadCnossosParameters every others parameters linked to RoadCnossosParameters class (e.g. speed on the road segment) + * @param vehicleCategory 1,2,3,4a,4b.. + * @param slopeDirection slope direction in ° + * @return + * @throws IOException + */ + private static Double getDeltaSlope(RoadCnossosParameters roadCnossosParameters, String vehicleCategory, double slopeDirection) throws IOException { + + double deltaSlope = 0; + double slope = slopeDirection * roadCnossosParameters.getSlopePercentage(); + switch (vehicleCategory) { + case "1": + if (slope < -6) { + deltaSlope = (Math.min(12, -slope) - 6); + } else if (slope <= 2) { + deltaSlope = 0.; + } else { + deltaSlope = ((roadCnossosParameters.getSpeedLv() / 100) * ((Math.min(12, slope) - 2) / 1.5)); + } + break; + case "2": + // Medium and Heavy vehicles (cat 2 and 3) - Eq 2.2.14 and 2.2.15 + if (slope < -4) { + deltaSlope = ((roadCnossosParameters.getSpeedMv() - 20) / 100) * (Math.min(12, -slope) - 4) / 0.7; + } else if (slope <= 0) { + deltaSlope = 0.; + } else { + deltaSlope = (roadCnossosParameters.getSpeedMv() / 100) * (Math.min(12, slope)); + } + break; + case "3": + // Medium and Heavy vehicles (cat 2 and 3) - Eq 2.2.14 and 2.2.15 + if (slope < -4) { + deltaSlope = ((roadCnossosParameters.getSpeedHgv() - 10) / 100) * (Math.min(12, -slope) - 4) / 0.5; + } else if (slope <= 0) { + deltaSlope = deltaSlope + 0.; + } else { + deltaSlope = deltaSlope + (roadCnossosParameters.getSpeedHgv() / 100) * (Math.min(12, slope)) / 0.8; + } + break; + } + // no effects on cat 4 vehicles Eq. 2.2.16 + + return deltaSlope; + } + + /** + * Return the noise emission level of a road segment in dB/m + * @param roadCnossosParameters every parameters linked to RoadCnossosParameters class (e.g. speed on the road segment) + * @return Noise level in dB + */ + + public static double evaluate(RoadCnossosParameters roadCnossosParameters) throws IOException { + final int freqParam = roadCnossosParameters.getFrequency(); + final double Temperature = roadCnossosParameters.getTemperature(); + final double Ts_stud = roadCnossosParameters.getTsStud(); + final double Pm_stud = roadCnossosParameters.getqStudRatio(); + final double Junc_dist = roadCnossosParameters.getJunc_dist(); + final int Junc_type = roadCnossosParameters.getJunc_type(); + final String roadSurface = roadCnossosParameters.getRoadSurface(); + final int coeffVer = roadCnossosParameters.getFileVersion(); + double vRef = 70.; + + /** + * Rolling Noise + */ + // Rolling noise level Eq. 2.2.4 + double lvRoadLvl = getNoiseLvl(getCoeff("ar", freqParam, "1", coeffVer), getCoeff("br", freqParam, "1", coeffVer), roadCnossosParameters.getSpeedLv(), vRef); + double medRoadLvl = getNoiseLvl(getCoeff("ar", freqParam, "2", coeffVer), getCoeff("br", freqParam, "2", coeffVer), roadCnossosParameters.getSpeedMv(), vRef); + double hgvRoadLvl = getNoiseLvl(getCoeff("ar", freqParam, "3", coeffVer), getCoeff("br", freqParam, "3", coeffVer), roadCnossosParameters.getSpeedHgv(), vRef); + // Rolling noise is only for categories 1, 2 and 3 + + // Correction for studded tyres - Eq. 2.2.6 + if (Pm_stud > 0 && Ts_stud > 0) { + lvRoadLvl = lvRoadLvl + getDeltaStuddedTyres(roadCnossosParameters, Pm_stud, Ts_stud, freqParam, coeffVer, vRef); + } + + // Effect of air temperature on rolling noise correction Eq 2.2.10 + lvRoadLvl = lvRoadLvl + getDeltaTemperature(Temperature, "1"); // K = 0.08 + medRoadLvl = medRoadLvl + getDeltaTemperature(Temperature, "2"); // K = 0.04 + hgvRoadLvl = hgvRoadLvl + getDeltaTemperature(Temperature, "3"); // K = 0.04 + + /** + * Propulsion Noise + */ + // General equation - Eq. 2.2.11 + double lvMotorLvl = getCoeff("ap", freqParam, "1", coeffVer) + getCoeff("bp", freqParam, "1", coeffVer) * (roadCnossosParameters.getSpeedLv() - vRef) / vRef; + double medMotorLvl = getCoeff("ap", freqParam, "2", coeffVer) + getCoeff("bp", freqParam, "2", coeffVer) * (roadCnossosParameters.getSpeedMv() - vRef) / vRef; + double hgvMotorLvl = getCoeff("ap", freqParam, "3", coeffVer) + getCoeff("bp", freqParam, "3", coeffVer) * (roadCnossosParameters.getSpeedHgv() - vRef) / vRef; + double wheelaMotorLvl = getCoeff("ap", freqParam, "4a", coeffVer) + getCoeff("bp", freqParam, "4a", coeffVer) * (roadCnossosParameters.getSpeedWav() - vRef) / vRef; + double wheelbMotorLvl = getCoeff("ap", freqParam, "4b", coeffVer) + getCoeff("bp", freqParam, "4b", coeffVer) * (roadCnossosParameters.getSpeedWbv() - vRef) / vRef; + + // Effect of road gradients + // This correction implicitly includes the effect of slope on speed. + // Light vehicles (cat 1) - Eq 2.2.13 + double sign = 1; + boolean twoWay = false; + switch ((int) roadCnossosParameters.getWay()) { + case 1: + sign = 1; + break; + case 2: + sign = -1; + break; + case 3: + twoWay = true; + } + + lvMotorLvl = lvMotorLvl + getDeltaSlope(roadCnossosParameters, "1", sign); + medMotorLvl = medMotorLvl + getDeltaSlope(roadCnossosParameters, "2", sign); + hgvMotorLvl = hgvMotorLvl + getDeltaSlope(roadCnossosParameters, "3", sign); + + /** + * Mixed effects (Rolling & Propulsion) + */ + // Effect of the acceleration and deceleration of vehicles + // Todo Here, we should get the Junc_dist by another way that we are doing now to be more precise issue #524 + double coefficientJunctionDistance = Math.max(1 - Math.abs(Junc_dist) / 100, 0); + // Effect of the acceleration and deceleration of vehicles - Rolling Noise Eq 2.2.17 + lvRoadLvl = lvRoadLvl + getCr("1", Junc_type, coeffVer) * coefficientJunctionDistance; + medRoadLvl = medRoadLvl + getCr("2", Junc_type, coeffVer) * coefficientJunctionDistance; + hgvRoadLvl = hgvRoadLvl + getCr("3", Junc_type, coeffVer) * coefficientJunctionDistance; + // Effect of the acceleration and deceleration of vehicles - Propulsion Noise Eq 2.2.18 + lvMotorLvl = lvMotorLvl + getCp("1", Junc_type, coeffVer) * coefficientJunctionDistance; + medMotorLvl = medMotorLvl + getCp("2", Junc_type, coeffVer) * coefficientJunctionDistance; + hgvMotorLvl = hgvMotorLvl + getCp("3", Junc_type, coeffVer) * coefficientJunctionDistance; + wheelaMotorLvl = wheelaMotorLvl + getCp("4a", Junc_type, coeffVer) * coefficientJunctionDistance; + wheelbMotorLvl = wheelbMotorLvl + getCp("4b", Junc_type, coeffVer) * coefficientJunctionDistance; + + // Effect of the type of road surface - Eq. 2.2.19 + lvRoadLvl = lvRoadLvl + getNoiseLvl(getA_RoadSurfaceCoeff(freqParam, "1", roadCnossosParameters.getRoadSurface(), coeffVer), getB_RoadSurfaceCoeff("1", roadSurface, coeffVer), roadCnossosParameters.getSpeedLv(), 70.); + medRoadLvl = medRoadLvl + getNoiseLvl(getA_RoadSurfaceCoeff(freqParam, "2", roadCnossosParameters.getRoadSurface(), coeffVer), getB_RoadSurfaceCoeff("2", roadSurface, coeffVer), roadCnossosParameters.getSpeedMv(), 70.); + hgvRoadLvl = hgvRoadLvl + getNoiseLvl(getA_RoadSurfaceCoeff(freqParam, "3", roadCnossosParameters.getRoadSurface(), coeffVer), getB_RoadSurfaceCoeff("3", roadSurface, coeffVer), roadCnossosParameters.getSpeedHgv(), 70.); + + // Correction road on propulsion noise - Eq. 2.2.20 + lvMotorLvl = lvMotorLvl + Math.min(getA_RoadSurfaceCoeff(freqParam, "1", roadSurface, coeffVer), 0.); + medMotorLvl = medMotorLvl + Math.min(getA_RoadSurfaceCoeff(freqParam, "2", roadSurface, coeffVer), 0.); + hgvMotorLvl = hgvMotorLvl + Math.min(getA_RoadSurfaceCoeff(freqParam, "3", roadSurface, coeffVer), 0.); + wheelaMotorLvl = wheelaMotorLvl + Math.min(getA_RoadSurfaceCoeff(freqParam, "4a", roadSurface, coeffVer), 0.); + wheelbMotorLvl = wheelbMotorLvl + Math.min(getA_RoadSurfaceCoeff(freqParam, "4b", roadSurface, coeffVer), 0.); + + /** + * Combine Propulsion and Rolling Noise - Eq. 2.2.2 + */ + final double lvCompound = sumDbValues(lvRoadLvl, lvMotorLvl); + final double medCompound = sumDbValues(medRoadLvl, medMotorLvl); + final double hgvCompound = sumDbValues(hgvRoadLvl, hgvMotorLvl); + final double wheelaCompound = wheelaMotorLvl; // Eq. 2.2.3 + final double wheelbCompound = wheelbMotorLvl; // Eq. 2.2.3 + /** + * Compute Noise Level from flow_rate and speed - Eq 2.2.1 + */ + double lvLvl = Vperhour2NoiseLevel(lvCompound, roadCnossosParameters.getLvPerHour(), roadCnossosParameters.getSpeedLv()); + double medLvl = Vperhour2NoiseLevel(medCompound, roadCnossosParameters.getMvPerHour(), roadCnossosParameters.getSpeedMv()); + double hgvLvl = Vperhour2NoiseLevel(hgvCompound, roadCnossosParameters.getHgvPerHour(), roadCnossosParameters.getSpeedHgv()); + double wheelaLvl = Vperhour2NoiseLevel(wheelaCompound, roadCnossosParameters.getWavPerHour(), roadCnossosParameters.getSpeedWav()); + double wheelbLvl = Vperhour2NoiseLevel(wheelbCompound, roadCnossosParameters.getWbvPerHour(), roadCnossosParameters.getSpeedWbv()); + + // In the case of a bi-directional traffic flow, it is necessary to split the flow into two components and correct half for uphill and half for downhill. + if (twoWay && roadCnossosParameters.getSlopePercentage() != 0) { + lvRoadLvl = lvRoadLvl - getDeltaSlope(roadCnossosParameters, "1", sign) + getDeltaSlope(roadCnossosParameters, "1", -sign); + medRoadLvl = medRoadLvl - getDeltaSlope(roadCnossosParameters, "2", sign) + getDeltaSlope(roadCnossosParameters, "2", -sign); + hgvRoadLvl = hgvRoadLvl - getDeltaSlope(roadCnossosParameters, "3", sign) + getDeltaSlope(roadCnossosParameters, "3", -sign); + double lvCompound_InverseSlope = sumDbValues(lvRoadLvl, lvMotorLvl); + double medCompound_InverseSlope = sumDbValues(medRoadLvl, medMotorLvl); + double hgvCompound_InverseSlope = sumDbValues(hgvRoadLvl, hgvMotorLvl); + + lvLvl = sumDbValues(Vperhour2NoiseLevel(lvCompound, roadCnossosParameters.getLvPerHour() / 2, roadCnossosParameters.getSpeedLv()), Vperhour2NoiseLevel(lvCompound_InverseSlope, roadCnossosParameters.getLvPerHour() / 2, roadCnossosParameters.getSpeedLv())); + medLvl = sumDbValues(Vperhour2NoiseLevel(medCompound, roadCnossosParameters.getMvPerHour() / 2, roadCnossosParameters.getSpeedMv()), Vperhour2NoiseLevel(medCompound_InverseSlope, roadCnossosParameters.getMvPerHour() / 2, roadCnossosParameters.getSpeedMv())); + hgvLvl = sumDbValues(Vperhour2NoiseLevel(hgvCompound, roadCnossosParameters.getHgvPerHour() / 2, roadCnossosParameters.getSpeedHgv()), Vperhour2NoiseLevel(hgvCompound_InverseSlope, roadCnossosParameters.getHgvPerHour() / 2, roadCnossosParameters.getSpeedHgv())); + } + + return sumDb5(lvLvl, medLvl, hgvLvl, wheelaLvl, wheelbLvl); + } +} \ No newline at end of file diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/RoadSourceParametersCnossos.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/road/cnossos/RoadCnossosParameters.java similarity index 72% rename from noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/RoadSourceParametersCnossos.java rename to noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/road/cnossos/RoadCnossosParameters.java index b3bdb0e8e..72de0b8ba 100644 --- a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/RoadSourceParametersCnossos.java +++ b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/road/cnossos/RoadCnossosParameters.java @@ -1,38 +1,41 @@ /** - * NoiseModelling is an open-source tool designed to produce environmental noise maps on very large urban areas. It can be used as a Java library or be controlled through a user friendly web interface. - *

- * This version is developed by the DECIDE team from the Lab-STICC (CNRS) and by the Mixt Research Unit in Environmental Acoustics (Université Gustave Eiffel). - * + * NoiseModelling is a library capable of producing noise maps. It can be freely used either for research and education, as well as by experts in a professional use. *

* NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. *

+ * Official webpage : http://noise-planet.org/noisemodelling.html * Contact: contact@noise-planet.org */ -package org.noise_planet.noisemodelling.emission; + +package org.noise_planet.noisemodelling.emission.road.cnossos; import java.io.IOException; /** * RoadSource parameters for CNOSSOS method * - * @Author Nicolas Fortin, Université Gustave Eiffel - * @Author Pierre Aumond, Université Gustave Eiffel - 03/05/2017 - Update 12/01/2021 + * @author Nicolas Fortin, Université Gustave Eiffel + * @author Pierre Aumond, Université Gustave Eiffel */ -public class RoadSourceParametersCnossos { - private final double lvPerHour; // Qm in 2015 directive - It shall be expressed as yearly average per hour, per time period (day-evening-night), per vehicle class and per source line. For all categories, input traffic flow data derived from traffic counting or from traffic models shall be used. - private final double mvPerHour; // Qm in 2015 directive - private final double hgvPerHour; // Qm in 2015 directive - private final double wavPerHour; // Qm in 2015 directive - private final double wbvPerHour; // Qm in 2015 directive - private final int FreqParam; // Frequency in Hz - private final double Temperature; // Temperature in °C - private final String roadSurface; // Road surface identifier, see coefficients_Road_Cnossos_2020.json for name list - private final double tsStud; // Period (in months) where the average ratio of the total volume of light vehicles per hour equipped with studded tyres - private final double qStudRatio; // Average ratio of the total volume of light vehicles per hour equipped with studded tyres during the period Ts_stud (in months) - private final double Junc_dist; // Distance to junction - private final int Junc_type; // Junction type (k=1 traffic lights, k=2 roundabout) +public class RoadCnossosParameters { + private double lvPerHour; // Qm It shall be expressed as yearly average per hour, per time period (day-evening-night), per vehicle class and per source line. For all categories, input traffic flow data derived from traffic counting or from traffic models shall be used. + private double mvPerHour; // Qm yearly average per hour + private double hgvPerHour; // Qm yearly average per hour + private double wavPerHour; // Qm yearly average per hour + private double wbvPerHour; // Qm yearly average per hour + + + private int frequency; // Frequency in Hz + private double temperature; // Temperature in °C + private String roadSurface; // Road surface identifier, see RoadCnossos_2020.json for name list + private double tsStud; // Period (in months) where the average ratio of the total volume of light vehicles per hour equipped with studded tyres + private double qStudRatio; // Average ratio of the total volume of light vehicles per hour equipped with studded tyres during the period Ts_stud (in months) + + + private double Junc_dist; // Distance to junction + private int Junc_type; // Junction type (k=1 traffic lights, k=2 roundabout) private double slopePercentage = 0; // slope s (in %), In the case of a bi-directional traffic flow, it is necessary to split the flow into two components and correct half for uphill and half for downhill. private int way = 1; // 1 = direct, 2 = inverse, 3 = double @@ -43,21 +46,94 @@ public class RoadSourceParametersCnossos { private double speedWav; // cat 4a vehicle speed (in km/h) private double speedWbv; // cat 4b vehicle speed (in km/h) - private int coeffVer = 2; // default coefficient version (1 = 2015, 2 = 2019) + private int fileVersion = 2; // default coefficient version (1 = 2015, 2 = 2020) /** - * set Coefficient version (1 = 2015, 2 = 2019) - * - * @param coeffVer + * Utility class */ - public void setCoeffVer(int coeffVer) { - this.coeffVer = coeffVer; + public RoadCnossosParameters() { } - public int getCoeffVer() { - return this.coeffVer; + /** + * Simplest road noise evaluation + * Vehicles category Table 2.2.a Directive 2015/Amendments 2020 + * lv : Passenger cars, delivery vans ≤ 3.5 tons, SUVs , MPVs including trailers and caravans + * mv: Medium heavy vehicles, delivery vans > 3.5 tons, buses, touring cars, etc. with two axles and twin tyre mounting on rear axle + * hgv: Heavy duty vehicles, touring cars, buses, with three or more axles + * wav: mopeds, tricycles or quads ≤ 50 cc + * wbv: motorcycles, tricycles or quads > 50 cc + * + * @param lv_speed Average light vehicle speed + * @param mv_speed Average medium vehicle speed + * @param hgv_speed Average heavy goods vehicle speed + * @param wav_speed Average light 2 wheels vehicle speed + * @param wbv_speed Average heavy 2 wheels vehicle speed + * @param lvPerHour Average light vehicle per hour + * @param mvPerHour Average heavy vehicle per hour + * @param hgvPerHour Average heavy vehicle per hour + * @param wavPerHour Average heavy vehicle per hour + * @param wbvPerHour Average heavy vehicle per hour + * @param frequency Studied Frequency (must be octave band) + * @param Temperature Temperature (Celsius) + * @param roadSurface roadSurface empty default, NL01 FR01 .. (look at src/main/resources/org/noise_planet/noisemodelling/emission/RoadCnossos_2020.json) + * @param Ts_stud A limited period Ts (in months) over the year where a average proportion pm of light vehicles are equipped with studded tyres and during . + * @param Pm_stud Average proportion of vehicles equipped with studded tyres + * @param Junc_dist Distance to the junction (in m) near an intersection, the road segment should be cut into small parts of 10 m.. + * @param Junc_type Type of junction (1 =traffic lights ; 2 = roundabout), take into account the effect of acceleration and deceleration near the intersection. + */ + public RoadCnossosParameters(double lv_speed, double mv_speed, double hgv_speed, double wav_speed, double wbv_speed, double lvPerHour, double mvPerHour, double hgvPerHour, double wavPerHour, double wbvPerHour, int frequency, double Temperature, String roadSurface, double Ts_stud, double Pm_stud, double Junc_dist, int Junc_type) { + + if (lvPerHour < 0) + throw new IllegalArgumentException("The flow rate of light vehicles is less than zero on one section."); + if (mvPerHour < 0) + throw new IllegalArgumentException("The flow rate of medium vehicles is less than zero on one section."); + if (hgvPerHour < 0) + throw new IllegalArgumentException("The flow rate of heavy vehicles is less than zero on one section."); + if (wavPerHour < 0) + throw new IllegalArgumentException("The flow rate of 2W(a) vehicles is less than zero on one section."); + if (wbvPerHour < 0) + throw new IllegalArgumentException("The flow rate of 2W(b) vehicles is less than zero on one section."); + if (lv_speed < 0) + throw new IllegalArgumentException("The speed light vehicles is less than zero on one section."); + if (mv_speed < 0) + throw new IllegalArgumentException("The speed of medium vehicles is less than zero on one section."); + if (hgv_speed < 0) + throw new IllegalArgumentException("The speed of heavy vehicles is less than zero on one section."); + if (wav_speed < 0) + throw new IllegalArgumentException("The speed of 2W(a) vehicles is less than zero on one section."); + if (wbv_speed < 0) + throw new IllegalArgumentException("The speed of 2W(b) vehicles is less than zero on one section."); + if (Ts_stud < 0 || Ts_stud > 12) + throw new IllegalArgumentException("The number of months of snow tire use is impossible for a section (<0 or >12)."); + if (Junc_type < 0 || Junc_type > 2) throw new IllegalArgumentException("Unlnown Junction type for a section."); + this.lvPerHour = Math.max(0, lvPerHour); + this.mvPerHour = Math.max(0, mvPerHour); + this.hgvPerHour = Math.max(0, hgvPerHour); + this.wavPerHour = Math.max(0, wavPerHour); + this.wbvPerHour = Math.max(0, wbvPerHour); + this.frequency = Math.max(0, frequency); + this.temperature = Temperature; + this.roadSurface = roadSurface; + this.tsStud = Math.max(0, Math.min(12, Ts_stud)); + this.qStudRatio = Math.max(0, Math.min(1, Pm_stud)); + this.Junc_dist = Math.max(0, Junc_dist); + this.Junc_type = Math.max(0, Math.min(2, Junc_type)); + this.speedLv = lv_speed; + this.speedMv = mv_speed; + this.speedHgv = hgv_speed; + this.speedWav = wav_speed; + this.speedWbv = wbv_speed; } + /** + * get the speed of the road segments depending on its type or subtype + * @param sLv Speed in the junction section + * @param speedmax Maximum speed authorized + * @param type Road type (1=Highway, 2=2x2, etc.) + * @param subtype Road subtype (1= 2x2 way 110 km/h, 2=2x2 way 90km/h off belt-way, etc.) + * @return + * @throws IllegalArgumentException + */ private static double getVPl(double sLv, double speedmax, int type, int subtype) throws IllegalArgumentException { switch (type) { case 1: @@ -145,9 +221,22 @@ private static double getVPl(double sLv, double speedmax, int type, int subtype) + type + ",subtype=" + subtype + ")."); } + public int getFileVersion() { + return this.fileVersion; + } + /** - * Compute {@link RoadSourceParametersCnossos#speedHgv} - * and {@link RoadSourceParametersCnossos#speedLv} from theses parameters + * set Coefficient version (1 = 2015, 2 = 2020) + * + * @param fileVersion + */ + public void setFileVersion(int fileVersion) { + this.fileVersion = fileVersion; + } + + /** + * Compute {@link RoadCnossosParameters#speedHgv} + * and {@link RoadCnossosParameters#speedLv} from theses parameters * * @param speed_junction Speed in the junction section * @param speed_max Maximum speed authorized @@ -173,104 +262,13 @@ public void setSpeedFromRoadCaracteristics(double speedLoad, double speed_juncti /** * Eq. 2.2.13 - * - * @param slopePercentage Gradient percentage of road from -12 % to 12 % - */ - public void setSlopePercentage(double slopePercentage) { - this.slopePercentage = Math.min(12., Math.max(-12., slopePercentage)); - } - - /** - * Set way of the road section - * - * @param way - */ - public void setWay(int way) { - this.way = way; - } - - /** - * Eq. 2.2.13 - * - * @param slopePercentage Gradient percentage of road from -12 % to 12 % + * Set the Slope Percentage without the limit of [-12% ; 12%] + * @param slopePercentage Gradient percentage of road */ public void setSlopePercentage_without_limit(double slopePercentage) { this.slopePercentage = slopePercentage; } - - /** - * Simplest road noise evaluation - * Vehicles category Table 2.2.a Directive 2015/Amendments 2019 - * lv : Passenger cars, delivery vans ≤ 3.5 tons, SUVs , MPVs including trailers and caravans - * mv: Medium heavy vehicles, delivery vans > 3.5 tons, buses, touring cars, etc. with two axles and twin tyre mounting on rear axle - * hgv: Heavy duty vehicles, touring cars, buses, with three or more axles - * wav: mopeds, tricycles or quads ≤ 50 cc - * wbv: motorcycles, tricycles or quads > 50 cc - * - * @param lv_speed Average light vehicle speed - * @param mv_speed Average medium vehicle speed - * @param hgv_speed Average heavy goods vehicle speed - * @param wav_speed Average light 2 wheels vehicle speed - * @param wbv_speed Average heavy 2 wheels vehicle speed - * @param lvPerHour Average light vehicle per hour - * @param mvPerHour Average heavy vehicle per hour - * @param hgvPerHour Average heavy vehicle per hour - * @param wavPerHour Average heavy vehicle per hour - * @param wbvPerHour Average heavy vehicle per hour - * @param FreqParam Studied Frequency - * @param Temperature Temperature (Celsius) - * @param roadSurface roadSurface empty default, NL01 FR01 .. - * @param Ts_stud A limited period Ts (in months) over the year where a average proportion pm of light vehicles are equipped with studded tyres and during . - * @param Pm_stud Average proportion of vehicles equipped with studded tyres - * @param Junc_dist Distance to junction - * @param Junc_type Type of junction ((k = 1 for a crossing with traffic lights ; k = 2 for a roundabout) - */ - public RoadSourceParametersCnossos(double lv_speed, double mv_speed, double hgv_speed, double wav_speed, double wbv_speed, double lvPerHour, double mvPerHour, double hgvPerHour, double wavPerHour, double wbvPerHour, int FreqParam, double Temperature, String roadSurface, double Ts_stud, double Pm_stud, double Junc_dist, int Junc_type) { - - if (lvPerHour < 0) - throw new IllegalArgumentException("The flow rate of light vehicles is less than zero on one section."); - if (mvPerHour < 0) - throw new IllegalArgumentException("The flow rate of medium vehicles is less than zero on one section."); - if (hgvPerHour < 0) - throw new IllegalArgumentException("The flow rate of heavy vehicles is less than zero on one section."); - if (wavPerHour < 0) - throw new IllegalArgumentException("The flow rate of 2W(a) vehicles is less than zero on one section."); - if (wbvPerHour < 0) - throw new IllegalArgumentException("The flow rate of 2W(b) vehicles is less than zero on one section."); - if (lv_speed < 0) - throw new IllegalArgumentException("The speed light vehicles is less than zero on one section."); - if (mv_speed < 0) - throw new IllegalArgumentException("The speed of medium vehicles is less than zero on one section."); - if (hgv_speed < 0) - throw new IllegalArgumentException("The speed of heavy vehicles is less than zero on one section."); - if (wav_speed < 0) - throw new IllegalArgumentException("The speed of 2W(a) vehicles is less than zero on one section."); - if (wbv_speed < 0) - throw new IllegalArgumentException("The speed of 2W(b) vehicles is less than zero on one section."); - if (Ts_stud < 0 || Ts_stud > 12) - throw new IllegalArgumentException("The number of months of snow tire use is impossible for a section (<0 or >12)."); - if (Junc_type < 0 || Junc_type > 2) throw new IllegalArgumentException("Unlnown Junction type for a section."); - this.lvPerHour = Math.max(0, lvPerHour); - this.mvPerHour = Math.max(0, mvPerHour); - this.hgvPerHour = Math.max(0, hgvPerHour); - this.wavPerHour = Math.max(0, wavPerHour); - this.wbvPerHour = Math.max(0, wbvPerHour); - this.FreqParam = Math.max(0, FreqParam); - this.Temperature = Temperature; - this.roadSurface = roadSurface; - this.tsStud = Math.max(0, Math.min(12, Ts_stud)); - this.qStudRatio = Math.max(0, Math.min(1, Pm_stud)); - this.Junc_dist = Math.max(0, Junc_dist); - this.Junc_type = Math.max(0, Math.min(2, Junc_type)); - this.speedLv = lv_speed; - this.speedMv = mv_speed; - this.speedHgv = hgv_speed; - this.speedWav = wav_speed; - this.speedWbv = wbv_speed; - } - - public double getLvPerHour() { return lvPerHour; } @@ -295,14 +293,34 @@ public double getSlopePercentage() { return slopePercentage; } + /** + * Eq. 2.2.13 + * Set the Slope Percentage + * Limitation to the accepted slope from -12% to 12% + * @param slopePercentage Gradient percentage of road from -12 % to 12 % + */ + public void setSlopePercentage(double slopePercentage) { + this.slopePercentage = Math.min(12., Math.max(-12., slopePercentage)); + } + public double getWay() { return way; } + /** + * Set way of the road section + * 1= from the smallest Primary Key to the largest + * 2 = opposite way + * 3 = both ways + * @param way + */ + public void setWay(int way) { + this.way = way; + } /** + * Get the speed for light vehicle * For speeds less than 20 km/h it shall have the same sound power level as defined by the formula for vm = 20 km/h. - * * @return */ public double getSpeedLv() throws IOException { @@ -313,8 +331,8 @@ public double getSpeedLv() throws IOException { } /** + * Get the speed for medium vehicle * For speeds less than 20 km/h it shall have the same sound power level as defined by the formula for vm = 20 km/h. - * * @return */ public double getSpeedMv() throws IOException { @@ -325,8 +343,8 @@ public double getSpeedMv() throws IOException { } /** + * Get the speed for heavy vehicle * For speeds less than 20 km/h it shall have the same sound power level as defined by the formula for vm = 20 km/h. - * * @return */ public double getSpeedHgv() throws IOException { @@ -337,8 +355,8 @@ public double getSpeedHgv() throws IOException { } /** + * Get the speed for two wheels vehicle (type a) * For speeds less than 20 km/h it shall have the same sound power level as defined by the formula for vm = 20 km/h. - * * @return */ public double getSpeedWav() throws IOException { @@ -349,8 +367,8 @@ public double getSpeedWav() throws IOException { } /** + * Get the speed for two wheels vehicle (type b) * For speeds less than 20 km/h it shall have the same sound power level as defined by the formula for vm = 20 km/h. - * * @return */ public double getSpeedWbv() throws IOException { @@ -360,18 +378,30 @@ public double getSpeedWbv() throws IOException { return speedWbv; } - public int getFreqParam() { - return FreqParam; + public int getFrequency() { + return frequency; + } + + public void setFrequency(int frequency) { + this.frequency = frequency; } public double getTemperature() { - return Temperature; + return temperature; + } + + public void setTemperature(double temperature) { + this.temperature = temperature; } public String getRoadSurface() { return roadSurface; } + public void setRoadSurface(String roadSurface) { + this.roadSurface = roadSurface; + } + public double getTsStud() { return tsStud; } @@ -384,9 +414,17 @@ public double getJunc_dist() { return Junc_dist; } + public void setJunc_dist(double junc_dist) { + Junc_dist = junc_dist; + } + public int getJunc_type() { return Junc_type; } + public void setJunc_type(int junc_type) { + Junc_type = junc_type; + } + } diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/road/cnossosvar/RoadVehicleCnossosvar.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/road/cnossosvar/RoadVehicleCnossosvar.java new file mode 100644 index 000000000..7878a8a82 --- /dev/null +++ b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/road/cnossosvar/RoadVehicleCnossosvar.java @@ -0,0 +1,257 @@ +/** + * NoiseModelling is a library capable of producing noise maps. It can be freely used either for research and education, as well as by experts in a professional use. + *

+ * NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. + *

+ * Official webpage : http://noise-planet.org/noisemodelling.html + * Contact: contact@noise-planet.org + */ + +package org.noise_planet.noisemodelling.emission.road.cnossosvar; + +import java.io.IOException; +import java.util.Random; + +import static org.noise_planet.noisemodelling.emission.road.cnossos.RoadCnossos.*; +import static org.noise_planet.noisemodelling.emission.utils.Utils.sumDbValues; + +/** + * Return the emission sound level for one unique vehicle + * The used method is very close to CNOSSOS (CNOSSOS variant) with some adjustements, + * especially to take into account accelerations or the variability on emission sound levels between the vehicle + * of a same category + * @author Nicolas Fortin, Université Gustave Eiffel + * @author Pierre Aumond, Université Gustave Eiffel + * @author Arnaud Can, Université Gustave Eiffel + */ + +public class RoadVehicleCnossosvar { + + /** + * Emission sound level for one unique vehicle + * @param parameters Noise emission parameters + * @return Noise level in dB + */ + public static double evaluate(RoadVehicleCnossosvarParameters parameters) throws IOException { + final boolean Stud = parameters.getStud(); + final double Junc_dist = parameters.getJunc_dist(); + final int Junc_type = parameters.getJunc_type(); + final int acc_type = parameters.getAcc_type(); + final String veh_type = parameters.getVeh_type(); + final int VehId = parameters.getVehId(); + final double acceleration = parameters.getAcceleration(); + double speed = parameters.getSpeed(); + + final int freqParam = parameters.getFrequency(); + final double Temperature = parameters.getTemperature(); + final String roadSurface = parameters.getRoadSurface(); + final int coeffVer = parameters.getFileVersion(); + + // /////////////////////// + // Noise road/tire CNOSSOS + double RoadLvl; // Lw/m (1 veh/h) + + // Noise level + // Noise level + RoadLvl = getNoiseLvl(getCoeff("ap", freqParam, veh_type, coeffVer), getCoeff("bp", freqParam, veh_type, coeffVer), speed, 70.); + + // Correction by temperature p. 36 + switch (veh_type) { + case "1": + RoadLvl = RoadLvl + 0.08 * (20 - Temperature); // K = 0.08 p. 36 + break; + case "2": + case "3": + RoadLvl = RoadLvl + 0.04 * (20 - Temperature); // K = 0.04 p. 36 + break; + default: + break; + } + + + // Rolling noise acceleration correction + double coefficientJunctionDistance = Math.max(1 - Math.abs(Junc_dist) / 100, 0); + RoadLvl = RoadLvl + getCr(veh_type, Junc_type, coeffVer) * coefficientJunctionDistance; + + + //Studied tyres + if (veh_type.equals("1")) { // because studded tyres are only on Cat 1 vehicle + if (Stud) { + double speedStud = (speed >= 90) ? 90 : speed; + speedStud = (speedStud <= 50) ? 50 : speedStud; + double deltaStud = getNoiseLvl(getCoeff("a", freqParam, veh_type, coeffVer), getCoeff("b", freqParam, veh_type, coeffVer), speedStud, 70.); + RoadLvl = RoadLvl + Math.pow(10, deltaStud / 10); + } + } + + //Road surface correction on rolling noise + RoadLvl = RoadLvl + getNoiseLvl(getA_RoadSurfaceCoeff(freqParam, veh_type, roadSurface, coeffVer), getB_RoadSurfaceCoeff(veh_type, roadSurface, coeffVer), speed, 70.); + + + // /////////////////////// + // Noise motor + // Calculate the emission powers of motors lights vehicles and heavies goods vehicles. + double MotorLvl; + RoadLvl = (speed <= 20) ? 0 : RoadLvl; + speed = (speed <= 20) ? 20 : speed; // Because when vehicles are stopped they still emit motor sounds. + // default or steady speed. + MotorLvl = getCoeff("ap", freqParam, veh_type, coeffVer) + getCoeff("bp", freqParam, veh_type, coeffVer) * (speed - 70) / 70; + + // Propulsion noise acceleration correction + double aMax; + switch (acc_type) { + case 1: + if (veh_type.equals("1") || veh_type.equals("2") || veh_type.equals("3")) { + MotorLvl = MotorLvl + getCp(veh_type, Junc_type, coeffVer) * coefficientJunctionDistance; + } + break; + case 2: + switch (veh_type) { + case "1": + aMax = 2; + if (acceleration >= -1 & freqParam < 250) { + MotorLvl = MotorLvl + Math.min(acceleration, aMax) * 5.0; + } + if (acceleration >= -1 & freqParam >= 250) { + MotorLvl = MotorLvl + Math.min(acceleration, aMax) * 2.0; + } + if (acceleration < -1 & freqParam < 250) { + MotorLvl = MotorLvl + -1 * 5.0; + } + if (acceleration < -1 & freqParam >= 250) { + MotorLvl = MotorLvl + -1 * 2.0; + } + break; + case "2": + case "3": + aMax = 1; + if (acceleration >= -1 & freqParam < 250) { + MotorLvl = MotorLvl + Math.min(acceleration, aMax) * 7.0; + } + if (acceleration >= -1 & freqParam >= 250) { + MotorLvl = MotorLvl + Math.min(acceleration, aMax) * 3.0; + } + if (acceleration < -1 & freqParam < 250) { + MotorLvl = MotorLvl + -1 * 7.0; + } + if (acceleration < -1 & freqParam >= 250) { + MotorLvl = MotorLvl + -1 * 3.0; + } + break; + case "4a": + case "4b": + aMax = 4; + if (acceleration >= -1 & freqParam < 250) { + MotorLvl = MotorLvl + Math.min(acceleration, aMax) * 5.0; + } + if (acceleration >= -1 & freqParam >= 250) { + MotorLvl = MotorLvl + Math.min(acceleration, aMax) * 2.0; + } + if (acceleration < -1 & freqParam < 250) { + MotorLvl = MotorLvl + -1 * 5.0; + } + if (acceleration < -1 & freqParam >= 250) { + MotorLvl = MotorLvl + -1 * 2.0; + } + break; + default: + break; + } + break; + case 3: + switch (veh_type) { + case "1": + case "4a": + case "4b": + aMax = 10; + if (acceleration >= -1 & freqParam < 250) { + MotorLvl = MotorLvl + Math.min(acceleration, aMax) * 5.0; + } + if (acceleration >= -1 & freqParam >= 250) { + MotorLvl = MotorLvl + Math.min(acceleration, aMax) * 2.0; + } + if (acceleration < -1 & freqParam < 250) { + MotorLvl = MotorLvl + -1 * 5.0; + } + if (acceleration < -1 & freqParam >= 250) { + MotorLvl = MotorLvl + -1 * 2.0; + } + break; + case "2": + case "3": + aMax = 10; + if (acceleration >= -1 & freqParam < 250) { + MotorLvl = MotorLvl + Math.min(acceleration, aMax) * 7.0; + } + if (acceleration >= -1 & freqParam >= 250) { + MotorLvl = MotorLvl + Math.min(acceleration, aMax) * 3.0; + } + if (acceleration < -1 & freqParam < 250) { + MotorLvl = MotorLvl + -1 * 7.0; + } + if (acceleration < -1 & freqParam >= 250) { + MotorLvl = MotorLvl + -1 * 3.0; + } + break; + default: + break; + } + break; + default: + break; + } + + + // Correction gradient + switch (veh_type) { + case "1": + if (parameters.getSlopePercentage() < -6) { + // downwards 2% <= p <= 6% + // Steady and deceleration, the same formulae + MotorLvl = MotorLvl + (Math.min(12, -parameters.getSlopePercentage()) - 6) / 1; + } else if (parameters.getSlopePercentage() <= 2) { + // 0% <= p <= 2% + MotorLvl = MotorLvl + 0.; + } else { + // upwards 2% <= p <= 6% + MotorLvl = MotorLvl + ((speed / 100) * ((Math.min(12, parameters.getSlopePercentage()) - 2) / 1.5)); + } + break; + case "2": + if (parameters.getSlopePercentage() < -4) { + // Steady and deceleration, the same formulae + MotorLvl = MotorLvl + ((speed - 20) / 100) * (Math.min(12, -1 * parameters.getSlopePercentage()) - 4) / 0.7; + } else if (parameters.getSlopePercentage() <= 0) { + MotorLvl = MotorLvl + 0.; + + } else { + MotorLvl = MotorLvl + (speed / 100) * (Math.min(12, parameters.getSlopePercentage())) / 1; + } + break; + case "3": + if (parameters.getSlopePercentage() < -4) { + // Steady and deceleration, the same formulae + MotorLvl = MotorLvl + ((speed - 10) / 100) * (Math.min(12, -1 * parameters.getSlopePercentage()) - 4) / 0.5; + } else if (parameters.getSlopePercentage() <= 0) { + MotorLvl = MotorLvl + 0.; + } else { + MotorLvl = MotorLvl + (speed / 100) * (Math.min(12, parameters.getSlopePercentage())) / 0.8; + } + break; + default: + break; + } + + + // Correction road on propulsion noise + MotorLvl = MotorLvl + Math.min(getA_RoadSurfaceCoeff(freqParam, veh_type, roadSurface, coeffVer), 0.); + + // add a random variation of LW sound level depending of the vehId following the LW standard error (LwStd) + Random r = new Random(VehId); + double deltaLwdistrib = 0.115 * Math.pow(parameters.getLwStd(), 2.0); // Gozalo, G. R., Aumond, P., & Can, A. (2020). Variability in sound power levels: Implications for static and dynamic traffic models. Transportation Research Part D: Transport and Environment, 84, 102339. + + return sumDbValues(RoadLvl, MotorLvl) - deltaLwdistrib + r.nextGaussian() * parameters.getLwStd(); + } + + +} diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/road/cnossosvar/RoadVehicleCnossosvarParameters.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/road/cnossosvar/RoadVehicleCnossosvarParameters.java new file mode 100644 index 000000000..0498efb24 --- /dev/null +++ b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/road/cnossosvar/RoadVehicleCnossosvarParameters.java @@ -0,0 +1,96 @@ +/** + * NoiseModelling is a library capable of producing noise maps. It can be freely used either for research and education, as well as by experts in a professional use. + *

+ * NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. + *

+ * Official webpage : http://noise-planet.org/noisemodelling.html + * Contact: contact@noise-planet.org + */ + +package org.noise_planet.noisemodelling.emission.road.cnossosvar; + +import org.noise_planet.noisemodelling.emission.road.cnossos.RoadCnossosParameters; + +/** + * Parameters for CNOSSOS variant method for one unique vehicle + * This class extends the class RoadCnossosParameters + * @author Nicolas Fortin + * @author Pierre Aumond + * @author Arnaud Can + */ + +public class RoadVehicleCnossosvarParameters extends RoadCnossosParameters { + private final double speed; + private final double acceleration; + private final String veh_type; + private final int acc_type; + private final boolean Stud; + private final double LwStd; + private final int VehId; + private int surfaceAge; + + /** + * Simplest road noise evaluation + * @param speed Vehicle speed + * @param acceleration Vehicle acceleration + * @param veh_type Vehicle type (CNOSSOS categories) + * @param acc_type Acceleration mode (1 = Distance to Junction (CNOSSOS), 2= Correction from IMAGINE with bounds , 3 = Correction from IMAGINE without bounds) + * @param Stud True = equipped with studded tyres + * @param LwStd Standard Deviation of Lw + * @param VehId Vehicle ID used as a seed for LwStd + */ + public RoadVehicleCnossosvarParameters(double speed, double acceleration, String veh_type, int acc_type, boolean Stud, double LwStd, int VehId) { + super(); + this.speed = speed; + this.acceleration = acceleration; + this.veh_type = veh_type; + this.acc_type = acc_type; + this.Stud = Stud; + this.LwStd = LwStd; + this.VehId = VehId; + } + + /** + * @return Road surface age + */ + public int getSurfaceAge() { + return surfaceAge; + } + + /** + * @param surfaceAge Road surface age in years, from 1 to 10 years. + */ + public void setSurfaceAge(int surfaceAge) { + this.surfaceAge = Math.max(1, Math.min(10, surfaceAge)); + } + + public double getLwStd() { + return LwStd; + } + + public int getVehId() { + return VehId; + } + + public double getSpeed() { + return speed; + } + + public int getAcc_type() { + return acc_type; + } + + public String getVeh_type() { + return veh_type; + } + + public double getAcceleration() { + return acceleration; + } + + public boolean getStud() { + return Stud; + } + +} + diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/Utils.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/utils/Utils.java similarity index 60% rename from noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/Utils.java rename to noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/utils/Utils.java index 7211e9bc6..4a591d66d 100644 --- a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/Utils.java +++ b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/utils/Utils.java @@ -1,29 +1,28 @@ /** - * NoiseModelling is an open-source tool designed to produce environmental noise maps on very large urban areas. It can be used as a Java library or be controlled through a user friendly web interface. - * - * This version is developed by the DECIDE team from the Lab-STICC (CNRS) and by the Mixt Research Unit in Environmental Acoustics (Université Gustave Eiffel). - * - * + * NoiseModelling is a library capable of producing noise maps. It can be freely used either for research and education, as well as by experts in a professional use. + *

* NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. - * + *

+ * Official webpage : http://noise-planet.org/noisemodelling.html * Contact: contact@noise-planet.org - * */ -package org.noise_planet.noisemodelling.emission; +package org.noise_planet.noisemodelling.emission.utils; import java.io.IOException; /** - * @Author Nicolas Fortin, Université Gustave Eiffel - * @Author Pierre Aumond, Université Gustave Eiffel + * Some basic tools useful for the emission module + * @author Nicolas Fortin, Université Gustave Eiffel + * @author Pierre Aumond, Université Gustave Eiffel */ public class Utils { + /** * Convert dB to W * @param dB - * @return + * @return W (double) */ public static double dbToW(double dB) { return Math.pow(10., dB / 10.); @@ -32,14 +31,14 @@ public static double dbToW(double dB) { /** * Convert W to dB * @param w - * @return + * @return dB (double) */ public static double wToDb(double w) { return 10 * Math.log10(w); } /** - * Compute the slope + * Compute the slope between to z points (for a road or rail segment) * @param beginZ Z start * @param endZ Z end * @param road_length_2d Road length (projected to Z axis) @@ -50,40 +49,45 @@ public static double computeSlope(double beginZ, double endZ, double road_length } /** - * Compute Noise Level from flow_rate and speed Eq 2.2.1 from Directive 2015/2019 + * Compute Noise Level from flow_rate and speed Eq 2.2.1 from Directive 2015 * @param LWim LW,i,m is the directional sound power of a single vehicle and is expressed in dB (re. 10–12 W/m). * @param Qm Traffic flow data Qm shall be expressed as yearly average per hour, per time period (day-evening-night), per vehicle class and per source line. * @param vm The speed vm is a representative speed per vehicle category: in most cases the lower of the maximum legal speed for the section of road and the maximum legal speed for the vehicle category. If measurement data is unavailable, the maximum legal speed for the vehicle category shall be used. - * @return - * @throws IOException if speed < 0 km/h + * @return emission sound level in dB/m + * @throws IOException if speed < 0 km/h */ - public static Double Vperhour2NoiseLevel(double LWim, double Qm, double vm){ + public static Double Vperhour2NoiseLevel(double LWim, double Qm, double vm) throws IOException { + if (vm < 0) { + throw new IOException("Error : speed < 0 km/h"); + } return LWim + 10 * Math.log10(Qm / (1000 * vm)); } /** - * Compute Noise Level from flow_rate and speed Eq 2.2.1 from Directive 2015/2019 + * Compute Noise Level from flow_rate and speed Eq 2.2.1 from Directive 2015 * @param LWimf LW,i,m is the directional sound power of a single vehicle and is expressed in dB (re. 10–12 W/m) and for every freq * @param Qm Traffic flow data Qm shall be expressed as yearly average per hour, per time period (day-evening-night), per vehicle class and per source line. * @param vm The speed vm is a representative speed per vehicle category: in most cases the lower of the maximum legal speed for the section of road and the maximum legal speed for the vehicle category. If measurement data is unavailable, the maximum legal speed for the vehicle category shall be used. - * @return - * @throws IOException if speed < 0 km/h + * @return emission sound level in dB/m + * @throws IOException if speed < 0 km/h */ - public static double[] Vperhour2NoiseLevelAllFreq(double[] LWimf, double Qm, double vm){ + public static double[] Vperhour2NoiseLevelAllFreq(double[] LWimf, double Qm, double vm) throws IOException { double[] LWimf_return = new double[LWimf.length]; - for (int f = 1 ;f< LWimf.length;f++) { - LWimf_return[f] = LWimf[f] + 10 * Math.log10(Qm / (1000 * vm)); + if (vm < 0) { + throw new IOException("Error : speed < 0 km/h"); + } + for (int f = 1; f < LWimf.length; f++) { + LWimf_return[f] = LWimf[f] + 10 * Math.log10(Qm / (1000 * vm)); } return LWimf_return; } /** - * energetic Sum of dBA array - * + * Energetic sum of dBA array * @param array1 * @param array2 - * @return + * @return energetic sum of dBA array */ public static double[] sumDbArray(double[] array1, double[] array2) { if (array1.length != array2.length) { @@ -96,10 +100,21 @@ public static double[] sumDbArray(double[] array1, double[] array2) { return sum; } + /** + * Convert dB to W + * Equivalent to dbToW + * @param dBA + * @return + */ public static double dbaToW(double dBA) { return Math.pow(10., dBA / 10.); } + /** + * Convert an array of dB values to W + * @param dBA array of dB values + * @return array of W values + */ public static double[] dbaToW(double[] dBA) { double[] ret = new double[dBA.length]; for (int i = 0; i < dBA.length; i++) { @@ -108,10 +123,21 @@ public static double[] dbaToW(double[] dBA) { return ret; } + /** + * Convert W to dB + * Equivalent to wToDb + * @param w + * @return + */ public static double wToDba(double w) { return 10 * Math.log10(w); } + /** + * Convert an array of W values to dB + * @param w array of w values + * @return array of dB values + */ public static double[] wToDba(double[] w) { double[] ret = new double[w.length]; for (int i = 0; i < w.length; i++) { @@ -120,4 +146,28 @@ public static double[] wToDba(double[] w) { return ret; } + /** + * Energetic sum of 2 dB values + * @param dB1 First value in dB + * @param dB2 Second value in dB + * @return + */ + public static Double sumDbValues(Double dB1, Double dB2) { + return wToDb(dbToW(dB1) + dbToW(dB2)); + } + + /** + * Energetic sum of 5 dB values + * @param dB1 value in dB + * @param dB2 value in dB + * @param dB3 value in dB + * @param dB4 value in dB + * @param dB5 value in dB + * @return + */ + public static Double sumDb5(Double dB1, Double dB2, Double dB3, Double dB4, Double dB5) { + return wToDb(dbToW(dB1) + dbToW(dB2) + dbToW(dB3) + dbToW(dB4) + dbToW(dB5)); + } + + } diff --git a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/utils/interpLinear.java b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/utils/interpLinear.java index 16b5dddbc..43c9e56bb 100644 --- a/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/utils/interpLinear.java +++ b/noisemodelling-emission/src/main/java/org/noise_planet/noisemodelling/emission/utils/interpLinear.java @@ -3,7 +3,10 @@ import java.util.Arrays; /** + * Linear Interpolation * Copy from https://github.com/mobilesec/timeseries-signal-processing/blob/master/Interpolation.java + * todo replace this by org.apache.commons.math3.analysis.interpolation + * * @author Muhammad Muaaz */ @@ -41,14 +44,12 @@ public static final double[] interpLinear(double[] x, double[] y, double[] xi) t for (int i = 0; i < xi.length; i++) { if ((xi[i] > x[x.length - 1]) || (xi[i] < x[0])) { yi[i] = Double.NaN; - } - else { + } else { int loc = Arrays.binarySearch(x, xi[i]); if (loc < -1) { loc = -loc - 2; yi[i] = slope[loc] * xi[i] + intercept[loc]; - } - else { + } else { yi[i] = y[loc]; } } diff --git a/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/Rail_Train_SNCF_2021.json b/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/Rail_Train_SNCF_2021.json deleted file mode 100644 index 5aa1c61c3..000000000 --- a/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/Rail_Train_SNCF_2021.json +++ /dev/null @@ -1,257 +0,0 @@ -{ - "AM96-3U3":{ - "SNCF6":1, - "SNCF73":9 - }, - "B81500-4U1":{ - "SNCF29":1 - }, - "B81500-4U2":{ - "SNCF29":2 - }, - "B81500-4U3":{ - "SNCF29":3 - }, - "B82500-4U1":{ - "SNCF29":1 - }, - "B82500-4U2":{ - "SNCF29":2 - }, - "B82500-4U3":{ - "SNCF29":3 - }, - "B83500-6U1":{ - "SNCF31":1 - }, - "B83500-6U2":{ - "SNCF31":2 - }, - "B84500-4U3":{ - "SNCF30":3 - }, - "B84500-6U1":{ - "SNCF31":1 - }, - "B84500-6U2":{ - "SNCF31":2 - }, - "BB27000":{ - "SNCF13":1 - }, - "CORAIL":{ - "SNCF6":1, - "SNCF73":9 - }, - "FLIRT-4U1":{ - "SNCF47":1 - }, - "FLIRT-4U2":{ - "SNCF47":2 - }, - "FRET":{ - "SNCF13":1, - "SNCF79":7, - "SNCF78":11 - }, - "ICE3-10U1":{ - "SNCF2":1 - }, - "TGV-A-12U1":{ - "SNCF3":1 - }, - "TGV-A-12U2":{ - "SNCF3":2 - }, - "TGV-D-10U1":{ - "SNCF2":1 - }, - "TGV-D-10U2":{ - "SNCF2":2 - }, - "TGVSE-10U1":{ - "SNCF1":1 - }, - "TGVSE-10U2":{ - "SNCF1":2 - }, - "TMST-20U1":{ - "SNCF4":1 - }, - "U25500-5U1":{ - "SNCF67":1 - }, - "U52500-4U1":{ - "SNCF68":1 - }, - "U52500-4U2":{ - "SNCF68":2 - }, - "U52500-4U3":{ - "SNCF68":3 - }, - "U53500-4U1":{ - "SNCF68":1 - }, - "U53500-4U2":{ - "SNCF68":2 - }, - "V2N":{ - "SNCF8":1, - "SNCF69":4 - }, - "VB2N":{ - "SNCF22":1, - "SNCF70":7 - }, - "X72500-2U1":{ - "SNCF33":1 - }, - "X72500-2U2":{ - "SNCF33":2 - }, - "X72500-2U3":{ - "SNCF33":3 - }, - "X73500-1U1":{ - "SNCF35":1 - }, - "X73500-1U2":{ - "SNCF35":2 - }, - "X73500-1U3":{ - "SNCF35":3 - }, - "X76500-4U1":{ - "SNCF37":1 - }, - "X76500-4U2":{ - "SNCF37":2 - }, - "X76500-4U3":{ - "SNCF37":3 - }, - "Z11500-2U1":{ - "SNCF64":1 - }, - "Z11500-2U2":{ - "SNCF64":2 - }, - "Z20500-5U1":{ - "SNCF39":1 - }, - "Z20500-5U2":{ - "SNCF39":2 - }, - "Z21500-3U1":{ - "SNCF40":1 - }, - "Z21500-3U2":{ - "SNCF40":2 - }, - "Z21500-3U3":{ - "SNCF40":3 - }, - "Z22500-5U1":{ - "SNCF41":1 - }, - "Z22500-5U2":{ - "SNCF41":2 - }, - "Z23500-2U1":{ - "SNCF42":1 - }, - "Z23500-2U2":{ - "SNCF42":2 - }, - "Z24500-3U1":{ - "SNCF43":1 - }, - "Z24500-3U2":{ - "SNCF43":2 - }, - "Z24500-3U3":{ - "SNCF43":3 - }, - "Z26500-4U1":{ - "SNCF44":1 - }, - "Z26500-4U2":{ - "SNCF44":2 - }, - "Z27500-4U1":{ - "SNCF47":1 - }, - "Z27500-4U2":{ - "SNCF47":2 - }, - "Z27500-4U3":{ - "SNCF47":3 - }, - "Z50000-7U1":{ - "SNCF48":1 - }, - "Z50000-7U2":{ - "SNCF48":2 - }, - "Z51500-4U2":{ - "SNCF50":2 - }, - "Z51500-6U1":{ - "SNCF51":1 - }, - "Z54900-4U1":{ - "SNCF50":1 - }, - "Z54900-4U2":{ - "SNCF50":2 - }, - "Z55500-6U1":{ - "SNCF53":1 - }, - "Z55500-6U2":{ - "SNCF53":2 - }, - "Z55500-6U3":{ - "SNCF53":3 - }, - "Z5600-5U1":{ - "SNCF61":1 - }, - "Z5600-5U2":{ - "SNCF61":2 - }, - "Z6400-4U1":{ - "SNCF63":1 - }, - "Z6400-4U2":{ - "SNCF63":2 - }, - "Z7300-2U1":{ - "SNCF64":1 - }, - "Z7300-2U2":{ - "SNCF64":2 - }, - "Z8100-4U1":{ - "SNCF65":1 - }, - "Z8100-4U2":{ - "SNCF65":2 - }, - "Z8800-4U1":{ - "SNCF66":1 - }, - "Z8800-4U2":{ - "SNCF66":2 - }, - "Z9500-2U1":{ - "SNCF64":1 - }, - "Z9500-2U2":{ - "SNCF64":2 - }, - "Z9500-2U3":{ - "SNCF64":3 - } -} \ No newline at end of file diff --git a/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/Rail_Vehicles_SNCF_2021.json b/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/Rail_Vehicles_SNCF_2021.json deleted file mode 100644 index c660eb66c..000000000 --- a/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/Rail_Vehicles_SNCF_2021.json +++ /dev/null @@ -1,1522 +0,0 @@ -{ - "SNCF1": { - "Description": "TGV-00-100-TGV-SE", - "Vmax": 300, - "Length": 200.19, - "TrailerBogieBraking": "Disques-garniture-frittee", - "MotorBogieBraking": "Semelle-composite", - "MotorWheelDiameter": 920, - "TrailerWheelDiameter": 920, - "ReflectingBarrierEffect": 1, - "NbCoach": 10, - "FirstSourcePosition": 10.0095, - "SourceSpacing": 20.019, - "NbAxlePerVeh": 2.6, - "RefAerodynamic": 1, - "RefRoughness": 4, - "RefContact": 5, - "RefTransfer": 2, - "RefTraction": 1 - }, - "SNCF2": { - "Description": "TGV200-600-700-TGV-Duplex-DASYE-TGV800-4700-TGV-2N2-TGV4300-TGV-Thalys-PBKATGV500-4500-TGV-R-TGV-Thalys-PBA-TGV4400-TGV-POS", - "Vmax": 320, - "Length": 200.19, - "TrailerBogieBraking": "Disques", - "MotorBogieBraking": "Semelle-composite", - "MotorWheelDiameter": 920, - "TrailerWheelDiameter": 910, - "ReflectingBarrierEffect": 1, - "NbCoach": 10, - "FirstSourcePosition": 10.0095, - "SourceSpacing": 20.019, - "NbAxlePerVeh": 2.6, - "RefAerodynamic": 1, - "RefRoughness": 4, - "RefContact": 5, - "RefTransfer": 2, - "RefTraction": 1 - }, - "SNCF3": { - "Description": "TGV300-400-TGV-A", - "Vmax": 300, - "Length": 237.59, - "TrailerBogieBraking": "Disques", - "MotorBogieBraking": "Semelle-composite", - "MotorWheelDiameter": 920, - "TrailerWheelDiameter": 920, - "ReflectingBarrierEffect": 1, - "NbCoach": 12, - "FirstSourcePosition": 9.8996, - "SourceSpacing": 19.7992, - "NbAxlePerVeh": 2.5, - "RefAerodynamic": 1, - "RefRoughness": 4, - "RefContact": 5, - "RefTransfer": 2, - "RefTraction": 1 - }, - "SNCF4": { - "Description": "TGV3200-TGV-TMST-Eurostar", - "Vmax": 300, - "Length": 393.72, - "TrailerBogieBraking": "Disques", - "MotorBogieBraking": "Semelle-composite", - "MotorWheelDiameter": 920, - "TrailerWheelDiameter": 920, - "ReflectingBarrierEffect": 1, - "NbCoach": 20, - "FirstSourcePosition": 9.843, - "SourceSpacing": 19.686, - "NbAxlePerVeh": 2.4, - "RefAerodynamic": 1, - "RefRoughness": 4, - "RefContact": 5, - "RefTransfer": 2, - "RefTraction": 1 - }, - "SNCF5": { - "Description": "A1A-A1A-68000", - "Vmax": 130, - "Length": 18.01, - "TrailerBogieBraking": "Semelle-fonte", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 950, - "TrailerWheelDiameter": null, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 9.005, - "SourceSpacing": 0, - "NbAxlePerVeh": 6, - "RefAerodynamic": 0, - "RefRoughness": 1, - "RefContact": 5, - "RefTransfer": 2, - "RefTraction": 14 - }, - "SNCF6": { - "Description": "BB15000", - "Vmax": 160, - "Length": 17.48, - "TrailerBogieBraking": "Semelle-frittee", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 1250, - "TrailerWheelDiameter": null, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 8.74, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 5, - "RefTransfer": 1, - "RefTraction": 15 - }, - "SNCF7": { - "Description": "BB16500-BB16600-BB16700", - "Vmax": 140, - "Length": 14.4, - "TrailerBogieBraking": "Semelle-fonte", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 1110, - "TrailerWheelDiameter": null, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 7.2, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 5, - "RefTransfer": 1, - "RefTraction": 14 - }, - "SNCF8": { - "Description": "BB17000-BB17100", - "Vmax": 140, - "Length": 14.94, - "TrailerBogieBraking": "Semelle-composite", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 1110, - "TrailerWheelDiameter": null, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 7.47, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 5, - "RefTransfer": 1, - "RefTraction": 14 - }, - "SNCF9": { - "Description": "BB22200-BB22300-BB22400", - "Vmax": 160, - "Length": 17.48, - "TrailerBogieBraking": "Semelle-frittee", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 1250, - "TrailerWheelDiameter": null, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 8.74, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 5, - "RefTransfer": 1, - "RefTraction": 15 - }, - "SNCF10": { - "Description": "BB25200", - "Vmax": 160, - "Length": 16.7, - "TrailerBogieBraking": "Semelle-fonte", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 1250, - "TrailerWheelDiameter": null, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 8.35, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 5, - "RefTransfer": 1, - "RefTraction": 14 - }, - "SNCF11": { - "Description": "BB25500-BB25600", - "Vmax": 140, - "Length": 14.7, - "TrailerBogieBraking": "Semelle-fonte", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 1110, - "TrailerWheelDiameter": null, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 7.35, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 5, - "RefTransfer": 1, - "RefTraction": 14 - }, - "SNCF12": { - "Description": "BB26000-BB26100-BB26200", - "Vmax": 200, - "Length": 17.71, - "TrailerBogieBraking": "Semelle-frittee", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 1250, - "TrailerWheelDiameter": null, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 8.855, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 5, - "RefTransfer": 1, - "RefTraction": 15 - }, - "SNCF13": { - "Description": "BB27000-BB27100", - "Vmax": 140, - "Length": 19.72, - "TrailerBogieBraking": "Semelle-composite", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 1150, - "TrailerWheelDiameter": null, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 9.86, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 5, - "RefTransfer": 1, - "RefTraction": 15 - }, - "SNCF14": { - "Description": "BB36000-BB36300", - "Vmax": 220, - "Length": 19.11, - "TrailerBogieBraking": "Disque-garniture-composite-+-semelle-fonte", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 1150, - "TrailerWheelDiameter": null, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 9.555, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 3, - "RefContact": 5, - "RefTransfer": 1, - "RefTraction": 15 - }, - "SNCF15": { - "Description": "BB37000", - "Vmax": 140, - "Length": 19.72, - "TrailerBogieBraking": "Semelle-composite", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 1150, - "TrailerWheelDiameter": null, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 9.86, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 5, - "RefTransfer": 1, - "RefTraction": 15 - }, - "SNCF16": { - "Description": "BB61000-Vossloh-G-1206-BB", - "Vmax": 100, - "Length": 14.7, - "TrailerBogieBraking": "Disque+semelles", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 1000, - "TrailerWheelDiameter": null, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 7.35, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 3, - "RefContact": 5, - "RefTransfer": 1, - "RefTraction": 14 - }, - "SNCF17": { - "Description": "BB63500-BB64000-BB64700", - "Vmax": 90, - "Length": 14.68, - "TrailerBogieBraking": "Semelle-fonte", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 1050, - "TrailerWheelDiameter": null, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 7.34, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 1, - "RefContact": 5, - "RefTransfer": 2, - "RefTraction": 14 - }, - "SNCF18": { - "Description": "BB66000-BB66100-BB66200-BB66300", - "Vmax": 120, - "Length": 14.89, - "TrailerBogieBraking": "Semelle-fonte", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 1100, - "TrailerWheelDiameter": null, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 7.445, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 5, - "RefTransfer": 1, - "RefTraction": 14 - }, - "SNCF19": { - "Description": "BB66400-BB66500", - "Vmax": 120, - "Length": 14.97, - "TrailerBogieBraking": "Semelle-composite", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 1100, - "TrailerWheelDiameter": null, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 7.486, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 5, - "RefTransfer": 1, - "RefTraction": 14 - }, - "SNCF20": { - "Description": "BB67000-BB67100-BB67300", - "Vmax": 140, - "Length": 17.09, - "TrailerBogieBraking": "Semelle-fonte", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 1150, - "TrailerWheelDiameter": null, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 8.545, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 5, - "RefTransfer": 1, - "RefTraction": 14 - }, - "SNCF21": { - "Description": "BB67200", - "Vmax": 90, - "Length": 17.09, - "TrailerBogieBraking": "Semelle-fonte", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 1150, - "TrailerWheelDiameter": null, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 8.545, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 5, - "RefTransfer": 1, - "RefTraction": 14 - }, - "SNCF22": { - "Description": "BB67400-BB67500-BB67600", - "Vmax": 140, - "Length": 17.09, - "TrailerBogieBraking": "Semelle-frittee", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 1250, - "TrailerWheelDiameter": null, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 8.545, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 5, - "RefTransfer": 1, - "RefTraction": 14 - }, - "SNCF23": { - "Description": "BB7200-BB7300-BB7400", - "Vmax": 160, - "Length": 17.48, - "TrailerBogieBraking": "Semelle-frittee", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 1250, - "TrailerWheelDiameter": null, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 8.74, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 5, - "RefTransfer": 1, - "RefTraction": 15 - }, - "SNCF24": { - "Description": "BB75000-BB75100-BB75300-BB75400", - "Vmax": 120, - "Length": 20.28, - "TrailerBogieBraking": "Semelle-composite", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 1150, - "TrailerWheelDiameter": null, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 10.14, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 5, - "RefTransfer": 1, - "RefTraction": 15 - }, - "SNCF25": { - "Description": "BB8500-BB8600", - "Vmax": 140, - "Length": 14.9, - "TrailerBogieBraking": "Semelle-fonte", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 1110, - "TrailerWheelDiameter": null, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 7.45, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 5, - "RefTransfer": 1, - "RefTraction": 14 - }, - "SNCF26": { - "Description": "CC72000-CC72100", - "Vmax": 160, - "Length": 20.19, - "TrailerBogieBraking": "Semelle-composite", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 1140, - "TrailerWheelDiameter": null, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 10.095, - "SourceSpacing": 0, - "NbAxlePerVeh": 6, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 5, - "RefTransfer": 1, - "RefTraction": 14 - }, - "SNCF27": { - "Description": "TBB64800", - "Vmax": 80, - "Length": 11.39, - "TrailerBogieBraking": "Semelle-fonte", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 1050, - "TrailerWheelDiameter": null, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 5.695, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 5, - "RefTransfer": 1, - "RefTraction": 14 - }, - "SNCF28": { - "Description": "B81500-tricaisse-AGC-bimode", - "Vmax": 160, - "Length": 57.4, - "TrailerBogieBraking": "Disque-garniture-frittee", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 840, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 3, - "FirstSourcePosition": 9.5667, - "SourceSpacing": 19.1333, - "NbAxlePerVeh": 2.7, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 4, - "RefTransfer": 3, - "RefTraction": 6 - }, - "SNCF29": { - "Description": "B81500-B82500-quadricaisse-AGC-bimode", - "Vmax": 160, - "Length": 72.8, - "TrailerBogieBraking": "Disque-garniture-frittee", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 840, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 4, - "FirstSourcePosition": 9.1, - "SourceSpacing": 18.2, - "NbAxlePerVeh": 2.5, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 4, - "RefTransfer": 3, - "RefTraction": 6 - }, - "SNCF30": { - "Description": "B83500-B84500-B85900-4-caisses-Regiolis", - "Vmax": 160, - "Length": 71.82, - "TrailerBogieBraking": "Disque-garniture-frittee", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 840, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 4, - "FirstSourcePosition": 8.9775, - "SourceSpacing": 17.955, - "NbAxlePerVeh": 2.5, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 4, - "RefTransfer": 3, - "RefTraction": 6 - }, - "SNCF31": { - "Description": "B83500-B84500-B85000-6-caisses-Regiolis", - "Vmax": 160, - "Length": 110, - "TrailerBogieBraking": "Disque-garniture-frittee", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 840, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 6, - "FirstSourcePosition": 9.1667, - "SourceSpacing": 18.3333, - "NbAxlePerVeh": 2.7, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 4, - "RefTransfer": 3, - "RefTraction": 6 - }, - "SNCF32": { - "Description": "X4500-modernise", - "Vmax": 120, - "Length": 43.48, - "TrailerBogieBraking": "Semelle-fonte", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 860, - "TrailerWheelDiameter": 860, - "ReflectingBarrierEffect": 1, - "NbCoach": 2, - "FirstSourcePosition": 10.87, - "SourceSpacing": 21.74, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 1, - "RefContact": 4, - "RefTransfer": 3, - "RefTraction": 9 - }, - "SNCF33": { - "Description": "X72500-X72600-X72700-bicaisse-X-TER", - "Vmax": 160, - "Length": 52.9, - "TrailerBogieBraking": "Disque-+-semelle-composite", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 920, - "TrailerWheelDiameter": 920, - "ReflectingBarrierEffect": 1, - "NbCoach": 2, - "FirstSourcePosition": 13.225, - "SourceSpacing": 26.45, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 3, - "RefContact": 4, - "RefTransfer": 2, - "RefTraction": 7 - }, - "SNCF34": { - "Description": "X72500-X72600-X72700-tricaisse-X-TER", - "Vmax": 160, - "Length": 78.5, - "TrailerBogieBraking": "Disque-+-semelle-composite", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 920, - "TrailerWheelDiameter": 920, - "ReflectingBarrierEffect": 1, - "NbCoach": 3, - "FirstSourcePosition": 13.0833, - "SourceSpacing": 26.1667, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 3, - "RefContact": 4, - "RefTransfer": 2, - "RefTraction": 7 - }, - "SNCF35": { - "Description": "X73500-X73600-X73700-X73800-73900-A-TER", - "Vmax": 140, - "Length": 28.9, - "TrailerBogieBraking": "Disque", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 840, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 14.45, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 5, - "RefTransfer": 3, - "RefTraction": 8 - }, - "SNCF36": { - "Description": "X76500-tricaisse-AGC", - "Vmax": 160, - "Length": 57.4, - "TrailerBogieBraking": "Disque-garniture-frittee", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 840, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 3, - "FirstSourcePosition": 9.5667, - "SourceSpacing": 19.1333, - "NbAxlePerVeh": 2.7, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 4, - "RefTransfer": 2, - "RefTraction": 6 - }, - "SNCF37": { - "Description": "X76500-quadricaisse-AGC", - "Vmax": 160, - "Length": 72.8, - "TrailerBogieBraking": "Disque-garniture-frittee", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 840, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 4, - "FirstSourcePosition": 9.1, - "SourceSpacing": 18.2, - "NbAxlePerVeh": 2.5, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 4, - "RefTransfer": 2, - "RefTraction": 6 - }, - "SNCF38": { - "Description": "Z20500-Z20600-Z20700-Z20800-Z20900-Z21000-quadricaisse-Z2N", - "Vmax": 140, - "Length": 103.508, - "TrailerBogieBraking": "Disque-+-semelle-composite", - "MotorBogieBraking": "Semelle-frittee", - "MotorWheelDiameter": 1020, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 4, - "FirstSourcePosition": 12.9385, - "SourceSpacing": 25.877, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 4, - "RefTransfer": 2, - "RefTraction": 3 - }, - "SNCF39": { - "Description": "Z20500-Z20600-Z20700-Z20800-pentacaisse-Z2N", - "Vmax": 140, - "Length": 129.4, - "TrailerBogieBraking": "Disque-+-semelle-composite", - "MotorBogieBraking": "Semelle-frittee", - "MotorWheelDiameter": 1020, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 5, - "FirstSourcePosition": 12.94, - "SourceSpacing": 25.88, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 4, - "RefTransfer": 2, - "RefTraction": 3 - }, - "SNCF40": { - "Description": "Z21500-Z21600-Z21700-ZTER", - "Vmax": 200, - "Length": 79.2, - "TrailerBogieBraking": "Disque-garniture-composite", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 920, - "TrailerWheelDiameter": 920, - "ReflectingBarrierEffect": 1, - "NbCoach": 3, - "FirstSourcePosition": 13.2, - "SourceSpacing": 26.4, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 4, - "RefTransfer": 2, - "RefTraction": 4 - }, - "SNCF41": { - "Description": "Z22500-Z22600-pentacaisse-MI2N", - "Vmax": 140, - "Length": 112, - "TrailerBogieBraking": "Disque-garniture-composite", - "MotorBogieBraking": "Semelle-composite", - "MotorWheelDiameter": 920, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 5, - "FirstSourcePosition": 11.2, - "SourceSpacing": 22.4, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 4, - "RefTransfer": 3, - "RefTraction": 4 - }, - "SNCF42": { - "Description": "Z23500-TER-2N-PG", - "Vmax": 140, - "Length": 52.5, - "TrailerBogieBraking": "Disque-garniture-composite-+-Semelle-composite", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 1020, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 2, - "FirstSourcePosition": 13.125, - "SourceSpacing": 26.25, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 5, - "RefTransfer": 3, - "RefTraction": 4 - }, - "SNCF43": { - "Description": "Z24500-Z24600-Z24700-Z24800-tricaisse-TER-2N-NG", - "Vmax": 160, - "Length": 81.1, - "TrailerBogieBraking": "Disque-garniture-composite-+-Semelle-composite", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 920, - "TrailerWheelDiameter": 920, - "ReflectingBarrierEffect": 1, - "NbCoach": 3, - "FirstSourcePosition": 13.5167, - "SourceSpacing": 27.0333, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 5, - "RefTransfer": 2, - "RefTraction": 4 - }, - "SNCF44": { - "Description": "Z26500-Z26600-quadricaisse-TER-2N-NG", - "Vmax": 160, - "Length": 107.5, - "TrailerBogieBraking": "Disque-garniture-composite-+-Semelle-composite", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 920, - "TrailerWheelDiameter": 920, - "ReflectingBarrierEffect": 1, - "NbCoach": 4, - "FirstSourcePosition": 13.4375, - "SourceSpacing": 26.875, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 5, - "RefTransfer": 2, - "RefTraction": 4 - }, - "SNCF45": { - "Description": "Z26500-Z26600-pentacaisse-TER-2N-NG", - "Vmax": 160, - "Length": 133.9, - "TrailerBogieBraking": "Disque-garniture-composite-+-Semelle-composite", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 920, - "TrailerWheelDiameter": 920, - "ReflectingBarrierEffect": 1, - "NbCoach": 5, - "FirstSourcePosition": 13.39, - "SourceSpacing": 26.78, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 5, - "RefTransfer": 2, - "RefTraction": 4 - }, - "SNCF46": { - "Description": "Z27500-Z27600-Z27700-Z27800-Z27900-tricaisse-ZGC", - "Vmax": 160, - "Length": 57.4, - "TrailerBogieBraking": "Disque-garniture-frittee", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 840, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 3, - "FirstSourcePosition": 9.5667, - "SourceSpacing": 19.1333, - "NbAxlePerVeh": 2.7, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 5, - "RefTransfer": 3, - "RefTraction": 5 - }, - "SNCF47": { - "Description": "Z27500-Z27600-Z27700-Z27800-Z27900-quadricaisse-ZGC", - "Vmax": 160, - "Length": 72.8, - "TrailerBogieBraking": "Disque-garniture-frittee", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 840, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 4, - "FirstSourcePosition": 9.1, - "SourceSpacing": 18.2, - "NbAxlePerVeh": 2.5, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 5, - "RefTransfer": 3, - "RefTraction": 5 - }, - "SNCF48": { - "Description": "Z50000-7-caisses-NAT", - "Vmax": 140, - "Length": 94.31, - "TrailerBogieBraking": "Disque-garniture-composite", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 840, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 7, - "FirstSourcePosition": 6.7364, - "SourceSpacing": 13.4729, - "NbAxlePerVeh": 2.3, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 4, - "RefTransfer": 3, - "RefTraction": 4 - }, - "SNCF49": { - "Description": "Z50000-8-caisses-NAT", - "Vmax": 140, - "Length": 112.5, - "TrailerBogieBraking": "Disque-garniture-composite", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 840, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 8, - "FirstSourcePosition": 7.0313, - "SourceSpacing": 14.0625, - "NbAxlePerVeh": 2.25, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 4, - "RefTransfer": 3, - "RefTraction": 4 - }, - "SNCF50": { - "Description": "Z51500-Z54500-Z54900-4-caisses-REGIOLIS", - "Vmax": 160, - "Length": 71.82, - "TrailerBogieBraking": "Disque-garniture-frittee", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 840, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 4, - "FirstSourcePosition": 8.9775, - "SourceSpacing": 17.955, - "NbAxlePerVeh": 2.5, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 5, - "RefTransfer": 3, - "RefTraction": 5 - }, - "SNCF51": { - "Description": "Z51500-6-caisses-REGIOLIS", - "Vmax": 160, - "Length": 110, - "TrailerBogieBraking": "Disque-garniture-frittee", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 840, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 6, - "FirstSourcePosition": 9.1667, - "SourceSpacing": 18.3333, - "NbAxlePerVeh": 2.7, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 5, - "RefTransfer": 3, - "RefTraction": 5 - }, - "SNCF52": { - "Description": "Z31500-REGIOLIS-LEX", - "Vmax": 160, - "Length": 71.82, - "TrailerBogieBraking": "Disque-garniture-frittee", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 840, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 4, - "FirstSourcePosition": 8.9775, - "SourceSpacing": 17.955, - "NbAxlePerVeh": 2.5, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 5, - "RefTransfer": 3, - "RefTraction": 5 - }, - "SNCF53": { - "Description": "Z55500-Z55600-Z55700-courte�Z56300-REGIO-2N", - "Vmax": 160, - "Length": 80.945, - "TrailerBogieBraking": "Disque", - "MotorBogieBraking": "2-essieux-fontes-+-semelle-composite", - "MotorWheelDiameter": 840, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 6, - "FirstSourcePosition": 6.7454, - "SourceSpacing": 13.4908, - "NbAxlePerVeh": 2.3, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 4, - "RefTransfer": 3, - "RefTraction": 4 - }, - "SNCF54": { - "Description": "Z55500-Z55600-Z55700-courte2-REGIO-2N", - "Vmax": 160, - "Length": 82.695, - "TrailerBogieBraking": "Disque", - "MotorBogieBraking": "2-essieux-fontes-+-semelle-composite", - "MotorWheelDiameter": 840, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 6, - "FirstSourcePosition": 6.8913, - "SourceSpacing": 13.7825, - "NbAxlePerVeh": 2.3, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 4, - "RefTransfer": 3, - "RefTraction": 4 - }, - "SNCF55": { - "Description": "Z55500-Z55600-Z55700-moyenne-REGIO-2N", - "Vmax": 160, - "Length": 94.975, - "TrailerBogieBraking": "Disque", - "MotorBogieBraking": "2-essieux-fontes-+-semelle-composite", - "MotorWheelDiameter": 840, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 7, - "FirstSourcePosition": 6.7839, - "SourceSpacing": 13.5679, - "NbAxlePerVeh": 2.3, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 4, - "RefTransfer": 3, - "RefTraction": 4 - }, - "SNCF56": { - "Description": "Z55500-Z55600-Z55700-Z57000-longue-REGIO-2N", - "Vmax": 160, - "Length": 109.91, - "TrailerBogieBraking": "Disque", - "MotorBogieBraking": "2-essieux-fontes-+-semelle-composite", - "MotorWheelDiameter": 840, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 8, - "FirstSourcePosition": 6.8694, - "SourceSpacing": 13.7388, - "NbAxlePerVeh": 2.3, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 4, - "RefTransfer": 3, - "RefTraction": 4 - }, - "SNCF57": { - "Description": "Z56500-Z56700-V200-intervilles-REGIO-2N", - "Vmax": 200, - "Length": 109.91, - "TrailerBogieBraking": "Disque", - "MotorBogieBraking": "2-essieux-fontes-+-semelle-composite", - "MotorWheelDiameter": 840, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 8, - "FirstSourcePosition": 6.8694, - "SourceSpacing": 13.7388, - "NbAxlePerVeh": 2.25, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 4, - "RefTransfer": 3, - "RefTraction": 4 - }, - "SNCF58": { - "Description": "Z55500-Z55600-Z55700-extra-longue-REGIO-2N", - "Vmax": 160, - "Length": 135.375, - "TrailerBogieBraking": "Disque", - "MotorBogieBraking": "2-essieux-fontes-+-semelle-composite", - "MotorWheelDiameter": 840, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 10, - "FirstSourcePosition": 6.7688, - "SourceSpacing": 13.5375, - "NbAxlePerVeh": 2.2, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 4, - "RefTransfer": 3, - "RefTraction": 4 - }, - "SNCF59": { - "Description": "Z56600-extra-longue-REGIO-2N-V200", - "Vmax": 200, - "Length": 135.375, - "TrailerBogieBraking": "Disque", - "MotorBogieBraking": "2-essieux-fontes-+-semelle-composite", - "MotorWheelDiameter": 840, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 10, - "FirstSourcePosition": 6.7688, - "SourceSpacing": 13.5375, - "NbAxlePerVeh": 2.2, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 4, - "RefTransfer": 3, - "RefTraction": 4 - }, - "SNCF60": { - "Description": "Z5600-Z5700-quadricaisse", - "Vmax": 140, - "Length": 98.76, - "TrailerBogieBraking": "Disque-garniture-composite-+-Semelle-composite", - "MotorBogieBraking": "Semelle-frittee", - "MotorWheelDiameter": 1020, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "RefAerodynamic": 0, - "NbCoach": 4, - "FirstSourcePosition": 12.345, - "SourceSpacing": 24.69, - "NbAxlePerVeh": 4, - "RefRoughness": 4, - "RefContact": 4, - "RefTransfer": 3, - "RefTraction": 3 - }, - "SNCF61": { - "Description": "Z5600-Z5700-pentacaisse", - "Vmax": 140, - "Length": 123.04, - "TrailerBogieBraking": "Disque-garniture-composite-+-Semelle-composite", - "MotorBogieBraking": "Semelle-frittee", - "MotorWheelDiameter": 1020, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 5, - "FirstSourcePosition": 12.304, - "SourceSpacing": 24.608, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 4, - "RefTransfer": 3, - "RefTraction": 3 - }, - "SNCF62": { - "Description": "Z5600-Z5700-hexacaisse", - "Vmax": 140, - "Length": 147.32, - "TrailerBogieBraking": "Disque-garniture-composite-+-Semelle-composite", - "MotorBogieBraking": "Semelle-frittee", - "MotorWheelDiameter": 1020, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 6, - "FirstSourcePosition": 12.2767, - "SourceSpacing": 24.5533, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 4, - "RefTransfer": 3, - "RefTraction": 3 - }, - "SNCF63": { - "Description": "Z6400-Z6500", - "Vmax": 120, - "Length": 92.43, - "TrailerBogieBraking": "Semelle-composite", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 1020, - "TrailerWheelDiameter": 800, - "ReflectingBarrierEffect": 1, - "NbCoach": 4, - "FirstSourcePosition": 11.5538, - "SourceSpacing": 23.1075, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 4, - "RefTransfer": 3, - "RefTraction": 2 - }, - "SNCF64": { - "Description": "Z7300-Z7500-Z9500-Z9600-Z11500-Z2", - "Vmax": 160, - "Length": 50.2, - "TrailerBogieBraking": "Disque-garniture-composite", - "MotorBogieBraking": "Semelle-frittee", - "MotorWheelDiameter": 1000, - "TrailerWheelDiameter": 890, - "ReflectingBarrierEffect": 1, - "NbCoach": 2, - "FirstSourcePosition": 12.55, - "SourceSpacing": 25.1, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 1, - "RefContact": 4, - "RefTransfer": 2, - "RefTraction": 9 - }, - "SNCF65": { - "Description": "Z8100-Z8200-MI79", - "Vmax": 140, - "Length": 104.05, - "TrailerBogieBraking": "Semelle-composite", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 1020, - "TrailerWheelDiameter": 920, - "ReflectingBarrierEffect": 1, - "NbCoach": 4, - "FirstSourcePosition": 13.0063, - "SourceSpacing": 26.0125, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 4, - "RefTransfer": 2, - "RefTraction": 2 - }, - "SNCF66": { - "Description": "Z8800-Z8900-Z2N", - "Vmax": 140, - "Length": 98.76, - "TrailerBogieBraking": "Disque-garniture-composite-+-semelle-composite", - "MotorBogieBraking": "Semelle-frittee", - "MotorWheelDiameter": 1020, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 4, - "FirstSourcePosition": 12.345, - "SourceSpacing": 24.69, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 4, - "RefTransfer": 2, - "RefTraction": 3 - }, - "SNCF67": { - "Description": "U25500-Tram-Train-Avento", - "Vmax": 100, - "Length": 36.678, - "TrailerBogieBraking": "Disque-garniture-composite", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 660, - "TrailerWheelDiameter": null, - "ReflectingBarrierEffect": 1, - "NbCoach": 5, - "FirstSourcePosition": 3.6678, - "SourceSpacing": 7.3356, - "NbAxlePerVeh": 1.6, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 2, - "RefTransfer": 4, - "RefTraction": 13 - }, - "SNCF68": { - "Description": "U52500-U53500-U53600-U53700-Tram-Train-Citadis-Dualis-�-TTNG", - "Vmax": 100, - "Length": 42, - "TrailerBogieBraking": "Disque-garniture-composite", - "MotorBogieBraking": "-", - "MotorWheelDiameter": 660, - "TrailerWheelDiameter": null, - "ReflectingBarrierEffect": 1, - "NbCoach": 4, - "FirstSourcePosition": 5.25, - "SourceSpacing": 10.5, - "NbAxlePerVeh": 2.5, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 2, - "RefTransfer": 4, - "RefTraction": 13 - }, - "SNCF69": { - "Description": "Voiture-V2N", - "Vmax": 160, - "Length": 26.4, - "TrailerBogieBraking": "Disque", - "MotorBogieBraking": "-", - "MotorWheelDiameter": null, - "TrailerWheelDiameter": 920, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 13.2, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 4, - "RefContact": 5, - "RefTransfer": 2, - "RefTraction": 11 - }, - "SNCF70": { - "Description": "Voiture-VB2N", - "Vmax": 140, - "Length": 24.28, - "TrailerBogieBraking": "Disque-+-Semelle-fonte", - "MotorBogieBraking": "-", - "MotorWheelDiameter": null, - "TrailerWheelDiameter": 920, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 12.14, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 1, - "RefContact": 4, - "RefTransfer": 2, - "RefTraction": 11 - }, - "SNCF71": { - "Description": "Voiture-VO2N-Voiture-VR2N", - "Vmax": 140, - "Length": 24.78, - "TrailerBogieBraking": "Disque-garniture-composite-+-semelle-fonte", - "MotorBogieBraking": "-", - "MotorWheelDiameter": null, - "TrailerWheelDiameter": 920, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 12.39, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 1, - "RefContact": 4, - "RefTransfer": 2, - "RefTraction": 11 - }, - "SNCF72": { - "Description": "Voiture-freinee-composite-LUNEA-VSOE", - "Vmax": 200, - "Length": 26.4, - "TrailerBogieBraking": "Semelle-composite", - "MotorBogieBraking": "-", - "MotorWheelDiameter": null, - "TrailerWheelDiameter": 920, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 13.2, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 4, - "RefTransfer": 2, - "RefTraction": 11 - }, - "SNCF73": { - "Description": "Voiture-freinee-fonte-CORAIL-VU-VTU-VSE", - "Vmax": 200, - "Length": 26.4, - "TrailerBogieBraking": "Semelle-fonte-disques-garniture-composite", - "MotorBogieBraking": "-", - "MotorWheelDiameter": null, - "TrailerWheelDiameter": 920, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 13.2, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 1, - "RefContact": 4, - "RefTransfer": 2, - "RefTraction": 12 - }, - "SNCF74": { - "Description": "Voiture-USI", - "Vmax": 200, - "Length": 25.094, - "TrailerBogieBraking": "Semelle-composite", - "MotorBogieBraking": "-", - "MotorWheelDiameter": null, - "TrailerWheelDiameter": 920, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 12.547, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 4, - "RefTransfer": 2, - "RefTraction": 11 - }, - "SNCF75": { - "Description": "Rame-RIB-RIO-RRR", - "Vmax": 140, - "Length": 99, - "TrailerBogieBraking": "Disque-garniture-composite+-semelle-frittee-ou-composite", - "MotorBogieBraking": "-", - "MotorWheelDiameter": null, - "TrailerWheelDiameter": 840, - "ReflectingBarrierEffect": 1, - "NbCoach": 4, - "FirstSourcePosition": 12.375, - "SourceSpacing": 24.75, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 5, - "RefTransfer": 2, - "RefTraction": 10 - }, - "SNCF76": { - "Description": "Wagon-FRET-PLAT-freine-composite-sans-chargement", - "Vmax": 120, - "Length": 17, - "TrailerBogieBraking": "Semelle-composite", - "MotorBogieBraking": "-", - "MotorWheelDiameter": null, - "TrailerWheelDiameter": 920, - "ReflectingBarrierEffect": 0, - "NbCoach": 1, - "FirstSourcePosition": 8.5, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 3, - "RefTransfer": 2, - "RefTraction": 10 - }, - "SNCF77": { - "Description": "Wagon-FRET-PLAT-freine-composite-sans-chargement", - "Vmax": 120, - "Length": 17, - "TrailerBogieBraking": "Semelle-composite", - "MotorBogieBraking": "-", - "MotorWheelDiameter": null, - "TrailerWheelDiameter": 920, - "ReflectingBarrierEffect": 0, - "NbCoach": 1, - "FirstSourcePosition": 8.5, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 1, - "RefContact": 4, - "RefTransfer": 2, - "RefTraction": 10 - }, - "SNCF78": { - "Description": "Wagon-FRET-freine-composite", - "Vmax": 120, - "Length": 17, - "TrailerBogieBraking": "Semelle-composite", - "MotorBogieBraking": "-", - "MotorWheelDiameter": null, - "TrailerWheelDiameter": 920, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 8.5, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 4, - "RefTransfer": 2, - "RefTraction": 10 - }, - "SNCF79": { - "Description": "Wagon-FRET-freine-fonte", - "Vmax": 120, - "Length": 17, - "TrailerBogieBraking": "Semelle-fonte", - "MotorBogieBraking": "-", - "MotorWheelDiameter": null, - "TrailerWheelDiameter": 920, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 8.5, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 1, - "RefContact": 4, - "RefTransfer": 2, - "RefTraction": 10 - }, - "SNCF80": { - "Description": "Fourgons-&-porte-autos-freine-composite", - "Vmax": 200, - "Length": 26.4, - "TrailerBogieBraking": "Semelle-composite", - "MotorBogieBraking": "-", - "MotorWheelDiameter": null, - "TrailerWheelDiameter": 920, - "ReflectingBarrierEffect": 1, - "NbCoach": 1, - "FirstSourcePosition": 13.2, - "SourceSpacing": 0, - "NbAxlePerVeh": 4, - "RefAerodynamic": 0, - "RefRoughness": 2, - "RefContact": 4, - "RefTransfer": 2, - "RefTraction": 10 - } -} \ No newline at end of file diff --git a/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/coefficients_Railway_Cnossos_2020.json b/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/coefficients_Railway_Cnossos_2020.json deleted file mode 100644 index 53d4b25bb..000000000 --- a/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/coefficients_Railway_Cnossos_2020.json +++ /dev/null @@ -1,4475 +0,0 @@ -{"Vehicle": { - "Transfer": { - "0": { - "Default": "true", - "Reference": "", - "Description": "Empty vehicle transfer function", - "WheelDiameter": null, - "WheelDiameterCode": null, - "Spectre": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - "1": { - "Default": "true", - "Reference": "IMAGINE", - "Description": "min", - "WheelDiameter": null, - "WheelDiameterCode": null, - "Spectre": [ - 60, - 60, - 60, - 60, - 60, - 60, - 60, - 60, - 60, - 60, - 60, - 60, - 60, - 60, - 60, - 60, - 60, - 60, - 60, - 60, - 60, - 60, - 60, - 60 - ] - }, - "2": { - "Default": "true", - "Reference": "IMAGINE", - "Description": "max", - "WheelDiameter": null, - "WheelDiameterCode": null, - "Spectre": [ - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140 - ] - }, - "3": { - "Default": "true", - "Reference": "IMAGINE", - "Description": "Wheel with diameter 920 mm, no measure", - "WheelDiameter": 920, - "WheelDiameterCode": null, - "Spectre": [ - 75.4, - 77.3, - 81.1, - 84.1, - 83.3, - 84.3, - 86, - 90.1, - 89.8, - 89, - 88.8, - 90.4, - 92.4, - 94.9, - 100.4, - 104.6, - 109.6, - 114.9, - 115, - 115, - 115.5, - 115.6, - 116, - 116.7 - ] - }, - "4": { - "Default": "true", - "Reference": "IMAGINE", - "Description": "Wheel with diameter 840 mm, no measure", - "WheelDiameter": 840, - "WheelDiameterCode": null, - "Spectre": [ - 75.4, - 77.3, - 81.1, - 84.1, - 82.8, - 83.3, - 84.1, - 86.9, - 87.9, - 89.9, - 90.9, - 91.5, - 91.5, - 93, - 98.7, - 101.6, - 107.6, - 111.9, - 114.5, - 114.5, - 115, - 115.1, - 115.5, - 116.2 - ] - }, - "5": { - "Default": "true", - "Reference": "IMAGINE", - "Description": "Wheel with diameter 680 mm, no measure", - "WheelDiameter": 680, - "WheelDiameterCode": null, - "Spectre": [ - 75.4, - 77.3, - 81.1, - 84.1, - 82.8, - 83.3, - 83.9, - 86.3, - 88, - 92.2, - 93.9, - 92.5, - 90.9, - 90.4, - 93.2, - 93.5, - 99.6, - 104.9, - 108, - 111, - 111.5, - 111.6, - 112, - 112.7 - ] - }, - "6": { - "Default": "true", - "Reference": "IMAGINE", - "Description": "Wheel with diameter 1200 mm, no measure", - "WheelDiameter": 1200, - "WheelDiameterCode": null, - "Spectre": [ - 75.4, - 77.3, - 81.1, - 84.1, - 82.8, - 83.3, - 84.5, - 90.4, - 90.4, - 89.9, - 90.1, - 91.3, - 91.5, - 93.6, - 100.5, - 104.6, - 115.6, - 115.9, - 116, - 116, - 116.5, - 116.6, - 117, - 117.7 - ] - } - }, - "WheelRoughness": { - "0": { - "Default": "true", - "Reference": "", - "Description": "Empty wheel roughness", - "Values": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - "1": { - "Default": "true", - "Reference": "IMAGINE", - "Description": "min", - "Values": [ - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15 - ] - }, - "2": { - "Default": "true", - "Reference": "IMAGINE", - "Description": "max", - "Values": [ - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25, - 25 - ] - }, - "3": { - "Default": "true", - "Reference": "IMAGINE", - "Description": "cast iron tread", - "Values": [ - 2.1684615861341738, - 2.1684615861341738, - 2.1684615861341738, - 2.1684615861341738, - 2.1684615861341738, - 2.1684615861341738, - 2.1684615861341738, - 2.1684615861341738, - 2.1684615861341738, - 2.1684615861341738, - 2.1684615861341738, - 2.3670045893225948, - 0.614781263900754, - 2.610924413363449, - 5.7565285612028694, - 8.7784615861341742, - 11.110011512915291, - 10.95837155865965, - 9.7914593750572188, - 7.4916045909735924, - 5.148695207491488, - 3.0225898933653781, - 1.28616199715323, - 0.167997434442427, - -0.702413370803574, - -1.167439464293351, - -1.02041103167661, - 0.271557355244967, - 0.238403459692385, - 1.321311142906995, - 3.0971084574824519, - 3.0971084574824519, - 3.0971084574824519, - 3.0971084574824519, - 3.0971084574824519 - ] - }, - "4": { - "Default": "true", - "Reference": "IMAGINE", - "Description": "composite", - "Values": [ - -3.95419018689975, - -3.95419018689975, - -3.95419018689975, - -3.95419018689975, - -3.95419018689975, - -3.95419018689975, - -3.95419018689975, - -3.95419018689975, - -3.95419018689975, - -3.95419018689975, - -3.95419018689975, - -3.95419018689975, - -3.95419018689975, - -3.95419018689975, - -4.3412995373955434, - -4.6209747678376347, - -4.8970550260649537, - -5.2224362812888314, - -6.3085781677861847, - -6.7984677237975282, - -7.2402633550228694, - -7.2696246754264786, - -7.2712957865790546, - -7.1399677582660583, - -6.9377366276182171, - -6.6786309297519, - -5.9913699638957461, - -3.7486765781060192, - -2.3766929885287151, - -2.590206897753383, - -2.4644302787172032, - -2.4644302787172032, - -2.4644302787172032, - -2.4644302787172032, - -2.4644302787172032 - ] - }, - "5": { - "Default": "true", - "Reference": "IMAGINE", - "Description": "disc brake", - "Values": [ - -5.93, - -5.93, - -5.93, - -5.93, - -5.93, - -5.93, - -5.93, - -5.93, - -5.93, - 2.32, - 2.82, - 2.56, - 1.22, - 2.06, - 0.92, - -0.25, - -1.57, - -2.85, - -4.94, - -7, - -8.58, - -9.32, - -9.51, - -10.12, - -10.25, - -10.33, - -10.81, - -10.91, - -9.52, - -9.52, - -9.52, - -9.52, - -9.52, - -9.52, - -9.52 - ] - } - }, - "ContactFilter":{ - "0" :{ - "Default":"true", - "Reference":null, - "Description":"Empty contact filter", - "Load":null, - "WheelDiameter":null, - "WheelDiameterCode":null, - "Values":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - "1" :{ - "Default":"true", - "Reference":"IMAGINE", - "Description":"min", - "Load":null, - "WheelDiameter":null, - "WheelDiameterCode":null, - "Values":[ - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30, - -30 - ] - }, - "2" :{ - "Default":"true", - "Reference":"IMAGINE", - "Description":"max", - "Load":null, - "WheelDiameter":null, - "WheelDiameterCode":null, - "Values":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - "3" :{ - "Default":"true", - "Reference":"IMAGINE", - "Description":"Wheel load 50kN wheel diameter 360mm", - "Load":"50", - "WheelDiameter":"360", - "WheelDiameterCode":"small, <500mm", - "Values":[ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - -0.1, - -0.2, - -0.3, - -0.6, - -1.0, - -1.8, - -3.2, - -5.4, - -8.7, - -12.2, - -16.7, - -17.7, - -17.8, - -20.7, - -22.1, - -22.8, - -24.0, - -24.5, - -24.7, - -27.0, - -27.8 - ] - }, - "4" :{ - "Default":"true", - "Reference":"IMAGINE", - "Description":"Wheel load 50kN wheel diameter 680mm", - "Load":"50", - "WheelDiameter":"680", - "WheelDiameterCode":"medium, 500 to 800mm", - "Values":[ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - -0.1, - -0.2, - -0.3, - -0.7, - -1.2, - -2.0, - -4.1, - -6.0, - -9.2, - -13.8, - -17.2, - -17.7, - -18.6, - -21.5, - -22.3, - -23.1, - -24.4, - -24.5, - -25.0, - -28.0, - -28.8, - -29.6 - ] - }, - "5" :{ - "Default":"true", - "Reference":"IMAGINE", - "Description":"Wheel load 25kN wheel diameter 920mm", - "Load":"25", - "WheelDiameter":"920", - "WheelDiameterCode":"large, >800mm", - "Values":[ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - -0.1, - -0.3, - -0.5, - -1.1, - -1.8, - -3.3, - -5.3, - -7.9, - -12.8, - -16.8, - -17.7, - -18.2, - -20.5, - -22.0, - -22.8, - -24.2, - -24.5, - -25.0, - -27.4, - -28.2, - -29.0 - ] - }, - "6" :{ - "Default":"true", - "Reference":"IMAGINE", - "Description":"Wheel load 50kN wheel diameter 920mm", - "Load":"50", - "WheelDiameter":"920", - "WheelDiameterCode":"large, >800mm", - "Values":[ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - -0.1, - -0.1, - -0.3, - -0.6, - -1.1, - -1.3, - -3.5, - -5.3, - -8.0, - -12.0, - -16.8, - -17.7, - -18.0, - -21.5, - -21.8, - -22.8, - -24.0, - -24.5, - -25.0, - -27.3, - -28.1, - -28.9, - -29.7 - ] - }, - "7" :{ - "Default":"true", - "Reference":"IMAGINE", - "Description":"Wheel load 100kN wheel diameter 920mm", - "Load":"100", - "WheelDiameter":"920", - "WheelDiameterCode":"large, >800mm", - "Values":[ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - -0.1, - -0.2, - -0.3, - -0.6, - -1.0, - -1.8, - -3.2, - -5.4, - -8.7, - -12.2, - -16.7, - -17.7, - -17.8, - -20.7, - -22.1, - -22.8, - -24.0, - -24.5, - -24.7, - -27.0, - -27.8, - -28.6, - -29.4, - -30.2 - ] - } - }, - "ConstantSpeed":{ - "0" :{"Default":"true", - "Reference":null, - "Description":"Empty traction", - "Values":{ - "A":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0], - "B":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0]} - }, - "1" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"min", - "Values":{ - "A":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0], - "B":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0]} - }, - "2" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"max", - "Values":{ - "A":[ - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140], - "B":[ - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140]} - }, - "3" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Diesel locomotive (c. 800kW)", - "Values":{ - "A":[ - 98.8613, - 94.7613, - 92.5613, - 94.5613, - 92.7613, - 92.7613, - 92.9613, - 94.7613, - 94.5613, - 95.6613, - 95.5613, - 98.5613, - 95.1613, - 95.0613, - 95.0613, - 94.0613, - 94.0613, - 99.3613, - 92.4613, - 89.4613, - 86.9613, - 84.0613, - 81.4613, - 79.1613], - "B":[ - 103.1613, - 99.9613, - 95.4613, - 93.9613, - 93.2613, - 93.5613, - 92.8613, - 92.6613, - 92.3613, - 92.7613, - 92.7613, - 96.7613, - 92.6613, - 92.9613, - 92.8613, - 93.0613, - 93.1613, - 98.2613, - 91.4613, - 88.6613, - 85.9613, - 83.3613, - 80.8613, - 78.6613]} - }, - "4" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Diesel locomotive (c. 2200kW)", - "Values":{ - "A":[ - 99.4103, - 107.3103, - 103.1103, - 102.1103, - 99.3103, - 99.3103, - 99.5103, - 101.3103, - 101.1103, - 102.2103, - 102.1103, - 101.1103, - 101.7103, - 101.6103, - 99.3103, - 96.0103, - 93.7103, - 101.9103, - 89.5103, - 87.1103, - 90.5103, - 31.4103, - 81.2103, - 79.6103], - "B":[ - 103.7103, - 112.5103, - 106.0103, - 101.5103, - 99.8103, - 100.1103, - 99.4103, - 99.2103, - 98.9103, - 99.3103, - 99.3103, - 99.3103, - 99.2103, - 99.5103, - 97.1103, - 95.0103, - 92.8103, - 100.8103, - 88.5103, - 86.3103, - 89.5103, - 30.7103, - 80.6103, - 79.1103]} - }, - "5" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Diesel loc/RENFE Dloco/1155kW", - "Values":{ - "A":[ - 99.3003, - 103.2003, - 109.0003, - 114.0003, - 109.2003, - 106.2003, - 103.4003, - 105.2003, - 105.0003, - 106.1003, - 106.0003, - 105.0003, - 105.6003, - 104.5003, - 102.9003, - 99.4003, - 96.8003, - 94.6003, - 92.1003, - 89.6003, - 87.5003, - 85.1003, - 82.9003, - 81.1003], - "B":[ - 103.6003, - 108.4003, - 111.9003, - 113.4003, - 109.7003, - 107.0003, - 103.3003, - 103.1003, - 102.8003, - 103.2003, - 103.2003, - 103.2003, - 103.1003, - 102.4003, - 100.7003, - 98.4003, - 95.9003, - 93.5003, - 91.1003, - 88.8003, - 86.5003, - 84.4003, - 82.3003, - 80.6003]} - }, - "6" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Diesel loc/NS6400 Dloco/1180kW", - "Values":{ - "A":[ - 100.9836, - 89.8836, - 92.6836, - 104.6836, - 94.8836, - 87.8836, - 83.0836, - 84.8836, - 84.6836, - 85.7836, - 85.6836, - 84.6836, - 85.2836, - 85.1836, - 85.1836, - 84.1836, - 84.1836, - 84.4836, - 81.5836, - 78.5836, - 76.0836, - 73.1836, - 70.5836, - 68.2836], - "B":[ - 105.2836, - 95.0836, - 95.5836, - 104.0836, - 95.3836, - 88.6836, - 82.9836, - 82.7836, - 82.4836, - 82.8836, - 82.8836, - 82.8836, - 82.7836, - 83.0836, - 82.9836, - 83.1836, - 83.2836, - 83.3836, - 80.5836, - 77.7836, - 75.0836, - 72.4836, - 69.9836, - 67.7836]} - }, - "7" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Diesel loc/TKOJ JT42CWR/Class66/2200kW", - "Values":{ - "A":[ - 95.432, - 104.332, - 102.132, - 99.132, - 93.332, - 96.332, - 96.532, - 98.332, - 98.132, - 99.232, - 99.132, - 98.132, - 98.732, - 96.632, - 94.632, - 91.632, - 89.632, - 87.932, - 86.032, - 84.032, - 82.532, - 80.632, - 79.032, - 77.732], - "B":[ - 99.732, - 109.532, - 105.032, - 98.532, - 93.832, - 97.132, - 96.432, - 96.232, - 95.932, - 96.332, - 96.332, - 96.332, - 96.232, - 94.532, - 92.432, - 90.632, - 88.732, - 86.832, - 85.032, - 83.232, - 81.532, - 79.932, - 78.432, - 77.232]} - }, - "8" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Diesel multiple unit", - "Values":{ - "A":[ - 82.583, - 82.483, - 89.283, - 90.283, - 93.483, - 99.483, - 98.683, - 95.483, - 90.283, - 91.383, - 91.283, - 90.283, - 90.883, - 91.783, - 92.783, - 92.783, - 90.783, - 88.083, - 85.183, - 83.183, - 81.683, - 78.783, - 76.183, - 73.883], - "B":[ - 86.883, - 87.683, - 92.183, - 89.683, - 93.983, - 100.283, - 98.583, - 93.383, - 88.083, - 88.483, - 88.483, - 88.483, - 88.383, - 89.683, - 90.583, - 91.783, - 89.883, - 86.983, - 84.183, - 82.383, - 80.683, - 78.083, - 75.583, - 73.383]} - }, - "9" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Electric locomotive", - "Values":{ - "A":[ - 87.8551, - 90.7551, - 91.5551, - 94.5551, - 94.7551, - 96.7551, - 103.9551, - 100.7551, - 99.5551, - 101.6551, - 98.5551, - 95.5551, - 95.1551, - 96.0551, - 92.0551, - 89.0551, - 87.0551, - 85.3551, - 83.4551, - 81.4551, - 79.9551, - 78.0551, - 76.4551, - 75.1551], - "B":[ - 92.1551, - 95.9551, - 94.4551, - 93.9551, - 95.2551, - 97.5551, - 103.8551, - 98.6551, - 97.3551, - 98.7551, - 95.7551, - 93.7551, - 92.6551, - 93.9551, - 89.8551, - 88.0551, - 86.1551, - 84.2551, - 82.4551, - 80.6551, - 78.9551, - 77.3551, - 75.8551, - 74.6551]} - }, - "10" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Electric multiple unit ", - "Values":{ - "A":[ - 80.5497, - 81.4497, - 80.5497, - 82.2497, - 80.0497, - 79.7497, - 79.6497, - 96.4497, - 80.5497, - 81.3497, - 97.2497, - 79.5497, - 79.8497, - 86.7497, - 81.7497, - 82.7497, - 80.7497, - 78.0497, - 75.1497, - 72.1497, - 69.6497, - 66.7497, - 64.1497, - 61.8497], - "B":[ - 84.8497, - 86.6497, - 83.4497, - 81.6497, - 80.5497, - 80.5497, - 79.5497, - 94.3497, - 78.3497, - 78.4497, - 94.4497, - 77.7497, - 77.3497, - 84.6497, - 79.5497, - 81.7497, - 79.8497, - 76.9497, - 74.1497, - 71.3497, - 68.6497, - 66.0497, - 63.5497, - 61.3497]} - } - }, - "AccelerationSpeed": { - "0" :{ - "Default": "true", - "Reference": null, - "Description": "Empty traction", - "Values": { - "A": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "B": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - } - }, - "1" :{ - "Default": "true", - "Reference": "IMAGINE", - "Description": "min", - "Values": { - "A": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "B": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - } - }, - "2" :{ - "Default": "true", - "Reference": "IMAGINE", - "Description": "max", - "Values": { - "A": [ - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140 - ], - "B": [ - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140 - ] - } - }, - "3" :{"Default": "true", - "Reference": "IMAGINE", - "Description": "Diesel locomotive (c. 800kW)", - "Values": { - "A":[ - 96.8613, - 102.7613, - 100.5613, - 97.5613, - 95.7613, - 95.7613, - 95.9613, - 97.7613, - 97.5613, - 98.6613, - 98.5613, - 102.5613, - 98.1613, - 98.0613, - 98.0613, - 97.0613, - 97.0613, - 97.3613, - 105.4613, - 97.4613, - 94.9613, - 92.0613, - 89.4613, - 87.1613 - ], - "B":[ - 101.1613, - 107.9613, - 103.4613, - 96.9613, - 96.2613, - 96.5613, - 95.8613, - 95.6613, - 95.3613, - 95.7613, - 95.7613, - 100.7613, - 95.6613, - 95.9613, - 95.8613, - 96.0613, - 96.1613, - 96.2613, - 104.4613, - 96.6613, - 93.9613, - 91.3613, - 88.8613, - 86.6613 - ]} - }, - "4" :{"Default": "true", - "Reference":"IMAGINE", - "Description": "Diesel locomotive (c. 2200kW)", - "Values": { - "A":[ - 99.4103, - 102.3103, - 113.1103, - 107.1103, - 103.3103, - 102.3103, - 102.5103, - 104.3103, - 104.1103, - 105.2103, - 105.1103, - 104.1103, - 104.7103, - 104.6103, - 102.3103, - 99.0103, - 96.7103, - 94.7103, - 105.0103, - 90.1103, - 88.3103, - 93.6103, - 84.2103, - 82.6103 - ], - "B":[ - 103.7103, - 107.5103, - 116.0103, - 106.5103, - 103.8103, - 103.1103, - 102.4103, - 102.2103, - 101.9103, - 102.3103, - 102.3103, - 102.3103, - 102.2103, - 102.5103, - 100.1103, - 98.0103, - 95.8103, - 93.6103, - 104.0103, - 89.3103, - 87.3103, - 92.9103, - 83.6103, - 82.1103 - ]} - }, - "5" :{"Default": "true", - "Reference":"IMAGINE", - "Description": "Diesel loc/RENFE Dloco/1155kW", - "Values": { - "A":[ - 99.3003, - 103.2003, - 109.0003, - 114.0003, - 115.2003, - 112.2003, - 109.4003, - 108.2003, - 108.0003, - 109.1003, - 109.0003, - 108.0003, - 108.6003, - 108.5003, - 107.5003, - 104.9003, - 102.4003, - 100.1003, - 97.7003, - 95.1003, - 93.1003, - 90.6003, - 88.5003, - 86.6003 - ], - "B":[ - 103.6003, - 108.4003, - 111.9003, - 113.4003, - 115.7003, - 113.0003, - 109.3003, - 106.1003, - 105.8003, - 106.2003, - 106.2003, - 106.2003, - 106.1003, - 106.4003, - 105.3003, - 103.9003, - 101.5003, - 99.0003, - 96.7003, - 94.3003, - 92.1003, - 89.9003, - 87.9003, - 86.1003 - ]} - }, - "6" :{ - "Default": "true", - "Reference":"IMAGINE", - "Description": "Diesel loc/NS6400 Dloco/1180kW", - "Values": { - "A":[ - 98.9836, - 104.8836, - 95.6836, - 97.6836, - 105.8836, - 97.8836, - 91.0836, - 87.8836, - 87.6836, - 88.7836, - 88.6836, - 87.6836, - 88.2836, - 88.1836, - 88.1836, - 87.1836, - 87.1836, - 87.4836, - 87.5836, - 84.5836, - 82.0836, - 79.1836, - 76.5836, - 74.2836 - ], - "B":[ - 103.2836, - 110.0836, - 98.5836, - 97.0836, - 106.3836, - 98.6836, - 90.9836, - 85.7836, - 85.4836, - 85.8836, - 85.8836, - 85.8836, - 85.7836, - 86.0836, - 85.9836, - 86.1836, - 86.2836, - 86.3836, - 86.5836, - 83.7836, - 81.0836, - 78.4836, - 75.9836, - 73.7836 - ]} - }, - "7" :{"Default": "true", - "Reference":"IMAGINE", - "Description": "Diesel loc/TKOJ JT42CWR/Class66/2200kW", - "Values": { - "A":[ - 91.432, - 99.332, - 110.132, - 107.132, - 100.332, - 96.332, - 99.532, - 101.332, - 101.132, - 102.232, - 102.132, - 101.132, - 101.732, - 101.632, - 99.632, - 96.632, - 94.632, - 92.932, - 91.032, - 89.032, - 87.532, - 85.632, - 84.032, - 82.732 - ], - "B":[ - 95.732, - 104.532, - 113.032, - 106.532, - 100.832, - 97.132, - 99.432, - 99.232, - 98.932, - 99.332, - 99.332, - 99.332, - 99.232, - 99.532, - 97.432, - 95.632, - 93.732, - 91.832, - 90.032, - 88.232, - 86.532, - 84.932, - 83.432, - 82.232 - ]} - }, - "8" :{"Default": "true", - "Reference":"IMAGINE", - "Description": "Diesel multiple unit", - "Values": { - "A":[ - 80.583, - 86.483, - 88.283, - 94.283, - 91.483, - 96.483, - 102.683, - 103.483, - 98.283, - 94.383, - 94.283, - 93.283, - 93.883, - 93.783, - 94.783, - 94.783, - 95.783, - 94.083, - 91.183, - 88.183, - 86.683, - 84.783, - 82.183, - 79.883 - ], - "B":[ - 84.883, - 91.683, - 91.183, - 93.683, - 91.983, - 97.283, - 102.583, - 101.383, - 96.083, - 91.483, - 91.483, - 91.483, - 91.383, - 91.683, - 92.583, - 93.783, - 94.883, - 92.983, - 90.183, - 87.383, - 85.683, - 84.083, - 81.583, - 79.383 - ]} - }, - "9" :{"Default": "true", - "Reference":"IMAGINE", - "Description": "Electric locomotive", - "Values": { - "A":[ - 87.8551, - 94.7551, - 91.5551, - 94.5551, - 94.7551, - 96.7551, - 107.9551, - 100.7551, - 99.5551, - 105.6551, - 98.5551, - 95.5551, - 95.1551, - 100.0551, - 92.0551, - 89.0551, - 87.0551, - 85.3551, - 83.4551, - 81.4551, - 79.9551, - 78.0551, - 76.4551, - 75.1551 - ], - "B":[ - 92.1551, - 99.9551, - 94.4551, - 93.9551, - 95.2551, - 97.5551, - 107.8551, - 98.6551, - 97.3551, - 102.7551, - 95.7551, - 93.7551, - 92.6551, - 97.9551, - 89.8551, - 88.0551, - 86.1551, - 84.2551, - 82.4551, - 80.6551, - 78.9551, - 77.3551, - 75.8551, - 74.6551 - ]} - }, - "10" :{"Default": "true", - "Reference":"IMAGINE", - "Description": "Electric multiple unit ", - "Values": { - "A":[ - 80.5497, - 81.4497, - 80.5497, - 82.2497, - 94.4497, - 79.7497, - 79.6497, - 96.4497, - 80.5497, - 81.3497, - 80.8497, - 79.5497, - 79.8497, - 86.7497, - 81.7497, - 82.7497, - 80.7497, - 78.0497, - 75.1497, - 72.1497, - 69.6497, - 66.7497, - 64.1497, - 61.8497 - ], - "B":[ - 84.8497, - 86.6497, - 83.4497, - 81.6497, - 94.9497, - 80.5497, - 79.5497, - 94.3497, - 78.3497, - 78.4497, - 78.0497, - 77.7497, - 77.3497, - 84.6497, - 79.5497, - 81.7497, - 79.8497, - 76.9497, - 74.1497, - 71.3497, - 68.6497, - 66.0497, - 63.5497, - 61.3497 - ] - } - } - }, - "DecelerationSpeed":{ - "0" :{"Default":"true", - "Reference":null, - "Description":"Empty traction", - "Values":{ - "A":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0], - "B":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0]} - }, - "1" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"min", - "Values":{ - "A":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0], - "B":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0]} - }, - "2" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"max", - "Values":{ - "A":[ - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140], - "B":[ - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140]} - }, - "3" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Diesel locomotive (c. 800kW)", - "Values":{ - "A":[ - 87.8613, - 83.7613, - 86.5613, - 88.5613, - 86.7613, - 86.7613, - 86.9613, - 88.7613, - 88.5613, - 89.6613, - 89.5613, - 93.5613, - 89.1613, - 89.0613, - 89.0613, - 88.0613, - 88.0613, - 86.3613, - 83.4613, - 80.4613, - 77.9613, - 75.0613, - 72.4613, - 70.1613], - "B":[ - 92.1613, - 88.9613, - 89.4613, - 87.9613, - 87.2613, - 87.5613, - 86.8613, - 86.6613, - 86.3613, - 86.7613, - 86.7613, - 91.7613, - 86.6613, - 86.9613, - 86.8613, - 87.0613, - 87.1613, - 85.2613, - 82.4613, - 79.6613, - 76.9613, - 74.3613, - 71.8613, - 69.6613]} - }, - "4" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Diesel locomotive (c. 2200kW)", - "Values":{ - "A":[ - 89.4103, - 90.3103, - 103.1103, - 95.1103, - 93.3103, - 93.3103, - 93.5103, - 95.3103, - 95.1103, - 96.2103, - 96.1103, - 95.1103, - 95.7103, - 95.6103, - 93.3103, - 96.6103, - 87.7103, - 85.7103, - 87.0103, - 81.1103, - 79.3103, - 77.1103, - 75.2103, - 73.6103], - "B":[ - 93.7103, - 95.5103, - 106.0103, - 94.5103, - 93.8103, - 94.1103, - 93.4103, - 93.2103, - 92.9103, - 93.3103, - 93.3103, - 93.3103, - 93.2103, - 93.5103, - 91.1103, - 95.6103, - 86.8103, - 84.6103, - 86.0103, - 80.3103, - 78.3103, - 76.4103, - 74.6103, - 73.1103]} - }, - "5" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Diesel loc/RENFE Dloco/1155kW", - "Values":{ - "A":[ - 99.3003, - 103.2003, - 103.0003, - 102.0003, - 97.2003, - 97.2003, - 97.4003, - 99.2003, - 99.0003, - 100.1003, - 100.0003, - 98.0003, - 97.0003, - 94.4003, - 91.8003, - 88.3003, - 85.7003, - 83.5003, - 81.0003, - 78.5003, - 76.4003, - 74.0003, - 71.9003, - 70.1003], - "B":[ - 103.6003, - 108.4003, - 105.9003, - 101.4003, - 97.7003, - 98.0003, - 97.3003, - 97.1003, - 96.8003, - 97.2003, - 97.2003, - 96.2003, - 94.5003, - 92.3003, - 89.6003, - 87.3003, - 84.8003, - 82.4003, - 80.0003, - 77.7003, - 75.4003, - 73.3003, - 71.3003, - 69.6003]} - }, - "6" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Diesel loc/NS6400 Dloco/1180kW", - "Values":{ - "A":[ - 82.9836, - 93.8836, - 88.6836, - 83.6836, - 76.8836, - 76.8836, - 77.0836, - 78.8836, - 78.6836, - 79.7836, - 79.6836, - 78.6836, - 79.2836, - 79.1836, - 79.1836, - 78.1836, - 75.1836, - 72.4836, - 69.5836, - 66.5836, - 64.0836, - 61.1836, - 58.5836, - 56.2836], - "B":[ - 87.2836, - 99.0836, - 91.5836, - 83.0836, - 77.3836, - 77.6836, - 76.9836, - 76.7836, - 76.4836, - 76.8836, - 76.8836, - 76.8836, - 76.7836, - 77.0836, - 76.9836, - 77.1836, - 74.2836, - 71.3836, - 68.5836, - 65.7836, - 63.0836, - 60.4836, - 57.9836, - 55.7836]} - }, - "7" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Diesel loc/TKOJ JT42CWR/Class66/2200kW", - "Values":{ - "A":[ - 92.432, - 88.332, - 87.132, - 92.132, - 90.332, - 90.332, - 90.532, - 92.332, - 92.132, - 93.232, - 93.132, - 90.132, - 88.732, - 86.632, - 84.632, - 81.632, - 79.632, - 77.932, - 76.032, - 74.032, - 72.532, - 70.632, - 69.032, - 67.732], - "B":[ - 96.732, - 93.532, - 90.032, - 91.532, - 90.832, - 91.132, - 90.432, - 90.232, - 89.932, - 90.332, - 90.332, - 88.332, - 86.232, - 84.532, - 82.432, - 80.632, - 78.732, - 76.832, - 75.032, - 73.232, - 71.532, - 69.932, - 68.432, - 67.232]} - }, - "8" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Diesel multiple unit", - "Values":{ - "A":[ - 78.583, - 79.483, - 88.283, - 84.283, - 82.483, - 82.483, - 88.683, - 84.483, - 84.283, - 85.383, - 85.283, - 84.283, - 90.883, - 84.783, - 84.783, - 83.783, - 83.783, - 84.083, - 82.183, - 79.183, - 75.683, - 71.783, - 68.183, - 64.883], - "B":[ - 82.883, - 84.683, - 91.183, - 83.683, - 82.983, - 83.283, - 88.583, - 82.383, - 82.083, - 82.483, - 82.483, - 82.483, - 88.383, - 82.683, - 82.583, - 82.783, - 82.883, - 82.983, - 81.183, - 78.383, - 74.683, - 71.083, - 67.583, - 64.383]} - }, - "9" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Electric locomotive", - "Values":{ - "A":[ - 78.8551, - 84.7551, - 82.5551, - 85.5551, - 85.7551, - 87.7551, - 97.9551, - 91.7551, - 90.5551, - 95.6551, - 89.5551, - 86.5551, - 86.1551, - 90.0551, - 83.0551, - 80.0551, - 78.0551, - 76.3551, - 74.4551, - 72.4551, - 70.9551, - 69.0551, - 67.4551, - 66.1551], - "B":[ - 83.1551, - 89.9551, - 85.4551, - 84.9551, - 86.2551, - 88.5551, - 97.8551, - 89.6551, - 88.3551, - 92.7551, - 86.7551, - 84.7551, - 83.6551, - 87.9551, - 80.8551, - 79.0551, - 77.1551, - 75.2551, - 73.4551, - 71.6551, - 69.9551, - 68.3551, - 66.8551, - 65.6551]} - }, - "10" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Electric multiple unit ", - "Values":{ - "A":[ - 80.5497, - 81.4497, - 80.5497, - 82.2497, - 80.0497, - 79.7497, - 79.6497, - 81.0497, - 80.5497, - 81.3497, - 80.8497, - 79.5497, - 79.8497, - 86.7497, - 81.7497, - 82.7497, - 80.7497, - 78.0497, - 75.1497, - 72.1497, - 69.6497, - 66.7497, - 64.1497, - 61.8497], - "B":[ - 84.8497, - 86.6497, - 83.4497, - 81.6497, - 80.5497, - 80.5497, - 79.5497, - 78.9497, - 78.3497, - 78.4497, - 78.0497, - 77.7497, - 77.3497, - 84.6497, - 79.5497, - 81.7497, - 79.8497, - 76.9497, - 74.1497, - 71.3497, - 68.6497, - 66.0497, - 63.5497, - 61.3497]} - } - }, - "IdlingSpeed":{ - "0" :{"Default":"true", - "Reference":null, - "Description":"Empty traction", - "Values":{ - "A":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0], - "B":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0]} - }, - "1" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"min", - "Values":{ - "A":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0], - "B":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0]} - }, - "2" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"max", - "Values":{ - "A":[ - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140], - "B":[ - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140]} - }, - "3" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Diesel locomotive (c. 800kW)", - "Values":{ - "A":[ - 87.8613, - 83.7613, - 86.5613, - 88.5613, - 86.7613, - 86.7613, - 86.9613, - 88.7613, - 88.5613, - 89.6613, - 89.5613, - 93.5613, - 89.1613, - 89.0613, - 89.0613, - 88.0613, - 88.0613, - 86.3613, - 83.4613, - 80.4613, - 77.9613, - 75.0613, - 72.4613, - 70.1613], - "B":[ - 92.1613, - 88.9613, - 89.4613, - 87.9613, - 87.2613, - 87.5613, - 86.8613, - 86.6613, - 86.3613, - 86.7613, - 86.7613, - 91.7613, - 86.6613, - 86.9613, - 86.8613, - 87.0613, - 87.1613, - 85.2613, - 82.4613, - 79.6613, - 76.9613, - 74.3613, - 71.8613, - 69.6613]} - }, - "4" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Diesel locomotive (c. 2200kW)", - "Values":{ - "A":[ - 89.4103, - 90.3103, - 103.1103, - 95.1103, - 93.3103, - 93.3103, - 93.5103, - 95.3103, - 95.1103, - 96.2103, - 96.1103, - 95.1103, - 95.7103, - 95.6103, - 93.3103, - 96.6103, - 87.7103, - 85.7103, - 87.0103, - 81.1103, - 79.3103, - 77.1103, - 75.2103, - 73.6103], - "B":[ - 93.7103, - 95.5103, - 106.0103, - 94.5103, - 93.8103, - 94.1103, - 93.4103, - 93.2103, - 92.9103, - 93.3103, - 93.3103, - 93.3103, - 93.2103, - 93.5103, - 91.1103, - 95.6103, - 86.8103, - 84.6103, - 86.0103, - 80.3103, - 78.3103, - 76.4103, - 74.6103, - 73.1103]} - }, - "5" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Diesel loc/RENFE Dloco/1155kW", - "Values":{ - "A":[ - 99.3003, - 103.2003, - 103.0003, - 102.0003, - 97.2003, - 97.2003, - 97.4003, - 99.2003, - 99.0003, - 100.1003, - 100.0003, - 98.0003, - 97.0003, - 94.4003, - 91.8003, - 88.3003, - 85.7003, - 83.5003, - 81.0003, - 78.5003, - 76.4003, - 74.0003, - 71.9003, - 70.1003], - "B":[ - 103.6003, - 108.4003, - 105.9003, - 101.4003, - 97.7003, - 98.0003, - 97.3003, - 97.1003, - 96.8003, - 97.2003, - 97.2003, - 96.2003, - 94.5003, - 92.3003, - 89.6003, - 87.3003, - 84.8003, - 82.4003, - 80.0003, - 77.7003, - 75.4003, - 73.3003, - 71.3003, - 69.6003]} - }, - "6" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Diesel loc/NS6400 Dloco/1180kW", - "Values":{ - "A":[ - 82.9836, - 93.8836, - 88.6836, - 83.6836, - 76.8836, - 76.8836, - 77.0836, - 78.8836, - 78.6836, - 79.7836, - 79.6836, - 78.6836, - 79.2836, - 79.1836, - 79.1836, - 78.1836, - 75.1836, - 72.4836, - 69.5836, - 66.5836, - 64.0836, - 61.1836, - 58.5836, - 56.2836], - "B":[ - 87.2836, - 99.0836, - 91.5836, - 83.0836, - 77.3836, - 77.6836, - 76.9836, - 76.7836, - 76.4836, - 76.8836, - 76.8836, - 76.8836, - 76.7836, - 77.0836, - 76.9836, - 77.1836, - 74.2836, - 71.3836, - 68.5836, - 65.7836, - 63.0836, - 60.4836, - 57.9836, - 55.7836]} - }, - "7" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Diesel loc/TKOJ JT42CWR/Class66/2200kW", - "Values":{ - "A":[ - 92.432, - 88.332, - 87.132, - 92.132, - 90.332, - 90.332, - 90.532, - 92.332, - 92.132, - 93.232, - 93.132, - 90.132, - 88.732, - 86.632, - 84.632, - 81.632, - 79.632, - 77.932, - 76.032, - 74.032, - 72.532, - 70.632, - 69.032, - 67.732], - "B":[ - 96.732, - 93.532, - 90.032, - 91.532, - 90.832, - 91.132, - 90.432, - 90.232, - 89.932, - 90.332, - 90.332, - 88.332, - 86.232, - 84.532, - 82.432, - 80.632, - 78.732, - 76.832, - 75.032, - 73.232, - 71.532, - 69.932, - 68.432, - 67.232]} - }, - "8" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Diesel multiple unit", - "Values":{ - "A":[ - 78.583, - 79.483, - 88.283, - 84.283, - 82.483, - 82.483, - 88.683, - 84.483, - 84.283, - 85.383, - 85.283, - 84.283, - 90.883, - 84.783, - 84.783, - 83.783, - 83.783, - 84.083, - 82.183, - 79.183, - 75.683, - 71.783, - 68.183, - 64.883], - "B":[ - 82.883, - 84.683, - 91.183, - 83.683, - 82.983, - 83.283, - 88.583, - 82.383, - 82.083, - 82.483, - 82.483, - 82.483, - 88.383, - 82.683, - 82.583, - 82.783, - 82.883, - 82.983, - 81.183, - 78.383, - 74.683, - 71.083, - 67.583, - 64.383]} - }, - "9" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Electric locomotive", - "Values":{ - "A":[ - 78.8551, - 84.7551, - 82.5551, - 85.5551, - 85.7551, - 87.7551, - 97.9551, - 91.7551, - 90.5551, - 95.6551, - 89.5551, - 86.5551, - 86.1551, - 90.0551, - 83.0551, - 80.0551, - 78.0551, - 76.3551, - 74.4551, - 72.4551, - 70.9551, - 69.0551, - 67.4551, - 66.1551], - "B":[ - 83.1551, - 89.9551, - 85.4551, - 84.9551, - 86.2551, - 88.5551, - 97.8551, - 89.6551, - 88.3551, - 92.7551, - 86.7551, - 84.7551, - 83.6551, - 87.9551, - 80.8551, - 79.0551, - 77.1551, - 75.2551, - 73.4551, - 71.6551, - 69.9551, - 68.3551, - 66.8551, - 65.6551]} - }, - "10" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Electric multiple unit ", - "Values":{ - "A":[ - 80.5497, - 81.4497, - 80.5497, - 82.2497, - 80.0497, - 79.7497, - 79.6497, - 81.0497, - 80.5497, - 81.3497, - 80.8497, - 79.5497, - 79.8497, - 86.7497, - 81.7497, - 82.7497, - 80.7497, - 78.0497, - 75.1497, - 72.1497, - 69.6497, - 66.7497, - 64.1497, - 61.8497], - "B":[ - 84.8497, - 86.6497, - 83.4497, - 81.6497, - 80.5497, - 80.5497, - 79.5497, - 78.9497, - 78.3497, - 78.4497, - 78.0497, - 77.7497, - 77.3497, - 84.6497, - 79.5497, - 81.7497, - 79.8497, - 76.9497, - 74.1497, - 71.3497, - 68.6497, - 66.0497, - 63.5497, - 61.3497]} - } - }, - "AerodynamicNoise":{ - "0" :{"Default":"true", - "Reference":"", - "Description":"Empty aerodynamic noise", - "V0":0, - "Alpha":0, - "Values":{ - "A":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0], - "B":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0]} - }, - "1" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"min", - "V0":0, - "Alpha":0, - "Values":{ - "A":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0], - "B":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0]} - }, - "2" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"max", - "V0":"400", - "Alpha":"100", - "Values":{ - "A":[ - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140], - "B":[ - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140]} - }, - "3" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Aerodynamic noise given at 300 km/h", - "V0":"300", - "Alpha":"50", - "Values":{ - "A":[ - 112.5778, - 113.1665, - 115.6758, - 117.385, - 115.2634, - 114.9727, - 114.882, - 116.3808, - 115.8696, - 116.2758, - 116.1758, - 115.1758, - 115.7758, - 115.6758, - 115.6758, - 114.6758, - 114.6758, - 114.9758, - 114.5449, - 113.0912, - 112.0857, - 110.6294, - 109.5758, - 108.8221], - "B":[ - 36.7103, - 38.5103, - 39.0103, - 37.5103, - 36.8103, - 37.1103, - 36.4103, - 36.2103, - 35.9103, - 36.3103, - 36.3103, - 36.3103, - 36.2103, - 36.5103, - 36.4103, - 105.2103, - 110.3103, - 110.4103, - 105.6103, - 37.2103, - 37.5103, - 37.9103, - 38.4103, - 39.2103]} - } - } -}, - "Track": { - "TrackTransfer":{ - "0" :{"Default":"true", - "Reference":null, - "Description":"Empty track transfer function", - "Sleeper":null, - "Railpad":null, - "Spectre":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - "1" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"min", - "Sleeper":null, - "Railpad":null, - "Spectre":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - "2" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"max", - "Sleeper":null, - "Railpad":null, - "Spectre":[ - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140 - ] - }, - "3" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Mono-block sleeper on soft rail pad", - "Sleeper":"Concrete mono-block", - "Railpad":"Soft", - "Spectre":[ - 53.3, - 59.3, - 67.2, - 75.9, - 79.2, - 81.8, - 84.2, - 88.6, - 91, - 94.5, - 97, - 99.2, - 104, - 107.1, - 108.3, - 108.5, - 109.7, - 110, - 110, - 110, - 110.3, - 110, - 110.1, - 110.6 - ] - }, - "4" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Mono-block sleeper on medium stiffness rail pad", - "Sleeper":"Concrete mono-block", - "Railpad":"Medium", - "Spectre":[ - 50.9, - 57.8, - 66.5, - 76.8, - 80.9, - 83.3, - 85.8, - 90, - 91.6, - 93.9, - 95.6, - 97.4, - 101.7, - 104.4, - 106, - 106.8, - 108.3, - 108.9, - 109.1, - 109.4, - 109.9, - 109.9, - 110.3, - 111 - ] - }, - "5" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Mono-block on hard rail pad", - "Sleeper":"Concrete mono-block", - "Railpad":"Stiff", - "Spectre":[ - 50.1, - 57.2, - 66.3, - 77.2, - 81.6, - 84, - 86.5, - 90.7, - 92.1, - 94.3, - 95.8, - 97, - 100.3, - 102.5, - 104.2, - 105.4, - 107.1, - 107.9, - 108.2, - 108.7, - 109.4, - 109.7, - 110.4, - 111.4 - ] - }, - "6" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Bi-block sleeper on soft rail pad", - "Sleeper":"Concrete bi-block", - "Railpad":"Soft", - "Spectre":[ - 50.9, - 56.6, - 64.3, - 72.3, - 75.4, - 78.5, - 81.8, - 86.6, - 89.1, - 91.9, - 94.5, - 97.5, - 104, - 107.9, - 108.9, - 108.8, - 109.8, - 110.2, - 110.1, - 110.1, - 110.3, - 109.9, - 110, - 110.4 - ] - }, - "7" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Bi-block sleeper on medium stiffness rail pad", - "Sleeper":"Concrete bi-block", - "Railpad":"Medium", - "Spectre":[ - 50, - 56.1, - 64.1, - 72.5, - 75.8, - 79.1, - 83.6, - 88.7, - 89.6, - 89.7, - 90.6, - 93.8, - 100.6, - 104.7, - 106.3, - 107.1, - 108.8, - 109.3, - 109.4, - 109.7, - 110, - 109.8, - 110, - 110.5 - ] - }, - "8" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Bi-block sleeper on hard rail pad", - "Sleeper":"Concrete bi-block", - "Railpad":"Stiff", - "Spectre":[ - 49.8, - 55.9, - 64, - 72.5, - 75.9, - 79.4, - 84.4, - 89.7, - 90.2, - 90.2, - 90.8, - 93.1, - 97.9, - 101.1, - 103.4, - 105.4, - 107.7, - 108.5, - 108.7, - 109.1, - 109.6, - 109.6, - 109.9, - 110.6 - ] - }, - "9" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Wooden sleepers", - "Sleeper":"Wood", - "Railpad":null, - "Spectre":[ - 44, - 51, - 59.9, - 70.8, - 75.1, - 76.9, - 77.2, - 80.9, - 85.3, - 92.5, - 97, - 98.7, - 102.8, - 105.4, - 106.5, - 106.4, - 107.5, - 108.1, - 108.4, - 108.7, - 109.1, - 109.1, - 109.5, - 110.2]}, - "10":{"Default":"true", - "Reference":"IMAGINE", - "Description":"Direct fastening on bridges", - "Sleeper":null, - "Railpad":null, - "Spectre":[ - 75.4, - 77.4, - 81.4, - 87.1, - 88.0, - 89.7, - 83.4, - 87.7, - 89.8, - 97.5, - 99.0, - 100.8, - 104.9, - 111.8, - 113.9, - 115.5, - 114.9, - 118.2, - 118.3, - 118.4, - 118.9, - 117.5, - 117.9, - 118.6 - ] - } - }, - "SuperstructureTransfer":{ - "0" :{"Default":"true", - "Reference":"", - "Description":"Empty superstructure transfer function", - "Spectre":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - "1" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"min", - "Spectre":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - "2" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"max", - "Spectre":[ - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140, - 140 - ] - }, - "3" :{"Default":"true", - "Reference":"CNOSSOS", - "Description":"CNOSSOS-EU Default", - "Spectre":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0] - } - }, - "RailRoughness":{ - "0" :{"Default":"true", - "Reference":"", - "Description":"Empty rail roughness", - "RoughnessCode":"", - "Values":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - "1" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"min", - "RoughnessCode":"Well maintained and very smooth", - "Values":[ - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15, - -15 - ] - }, - "2" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"max", - "RoughnessCode":"Not maintained and bad condition", - "Values":[ - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22, - 22 - ] - }, - "3" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"EN ISO 3095 2013", - "RoughnessCode":"Well maintained and very smooth", - "Values":[ - 17.1, - 17.1, - 17.1, - 17.1, - 17.1, - 17.1, - 17.1, - 17.1, - 15.0, - 13.0, - 11.0, - 9.0, - 7.0, - 4.9, - 2.9, - 0.9, - -1.1, - -3.2, - -5.0, - -5.6, - -6.2, - -6.8, - -7.4, - -8.0, - -8.6, - -9.2, - -9.8, - -10.4, - -11.0, - -11.6, - -12.2, - -12.8, - -13.4, - -14.0, - -14.0 - ] - }, - "4" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Average network", - "RoughnessCode":"Normally maintained smooth", - "Values":[ - 35.0, - 31.0, - 28.0, - 25.0, - 23.0, - 20.0, - 17.0, - 13.5, - 10.5, - 9.0, - 6.5, - 5.5, - 5.0, - 3.5, - 2.0, - 0.1, - -0.2, - -0.3, - -0.8, - -3.0, - -5.0, - -7.0, - -8.0, - -9.0, - -10.0, - -12.0, - -13.0, - -14.0, - -15.0, - -16.0, - -17.0, - -18.0, - -19.0, - -19.0, - -19.0 - ] - } - }, - "ImpactNoise":{ - "0" :{"Default":"true", - "Reference":"", - "Description":"Empty impact noise", - "RoughnessCode":"", - "JoinDensity":null, - "JoinDensityDescription":"", - "Values":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - }, - "1" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"min", - "RoughnessCode":"Normally maintained smooth", - "JoinDensity":0, - "JoinDensityDescription":"none", - "Values":[ - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40, - -40 - ] - }, - "2" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"max", - "RoughnessCode":"Normally maintained smooth", - "JoinDensity":3, - "JoinDensityDescription":">2 switches/joints/crossings/100m", - "Values":[ - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30, - 30 - ] - }, - "3" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"Single switch/joint/crossing/100m", - "RoughnessCode":"Normally maintained smooth", - "JoinDensity":1, - "JoinDensityDescription":"single switch/joint/crossing/100m", - "Values":[ - 22.0, - 22.0, - 22.0, - 22.0, - 22.0, - 20.0, - 16.0, - 15.0, - 14.0, - 15.0, - 14.0, - 12.0, - 11.0, - 10.0, - 9.0, - 8.0, - 6.0, - 3.0, - 2.0, - -3.0, - -8.0, - -13.0, - -17.0, - -19.0, - -22.0, - -25.0, - -26.0, - -32.0, - -35.0, - -40.0, - -43.0, - -45.0, - -47.0, - -49.0, - -50.0 - ] - } - }, - "BridgeConstant":{ - "0" :{"Default":"true", - "Reference":"", - "Description":"Empty bridge constant", - "Value":0 - }, - "1" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"min", - "Value":0 - }, - "2" :{"Default":"true", - "Reference":"IMAGINE", - "Description":"max", - "Value":9 - }, - "3" :{"Default":"true", - "Reference":"CNOSSOS", - "Description":"Predominantly concrete or masonry bridges with any trackform", - "Values":[ - 85.2, - 87.1, - 91.0, - 94.0, - 94.4, - 96.0, - 92.5, - 96.7, - 97.4, - 99.4, - 100.7, - 102.5, - 107.1, - 109.8, - 112.0, - 107.2, - 106.8, - 107.3, - 99.3, - 91.4, - 86.9, - 79.7, - 75.1, - 70.8] - }, - "4" :{"Default":"true", - "Reference":"CNOSSOS", - "Description":"Predominantly steel bridges with ballasted track ", - "Values":[ - 90.1, - 92.1, - 96.0, - 99.5, - 99.9, - 101.5, - 99.6, - 103.8, - 104.5, - 106.5, - 107.8, - 109.6, - 116.1, - 118.8, - 120.9, - 109.5, - 109.1, - 109.6, - 102.0, - 94.1, - 89.6, - 83.6, - 79.0, - 74.7] - } - } - } -} - diff --git a/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/coefficients_Railway_Cnossos_SNCF.json b/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/coefficients_Railway_Cnossos_SNCF.json deleted file mode 100644 index f04418dd7..000000000 --- a/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/coefficients_Railway_Cnossos_SNCF.json +++ /dev/null @@ -1,1818 +0,0 @@ -{ - "Vehicle":{ - "Transfer":{ - "1":{ - "Description":"Roue-de-diametre-1200-mm", - "Reference":"SNCF Juin 2021", - "Spectre":[ - 66.2, - 70.2, - 78.2, - 90.9, - 89.1, - 91.8, - 93.8, - 96.9, - 97.3, - 100.8, - 106.1, - 112.8, - 119.1, - 121.0, - 121.9, - 123.4, - 126.4, - 128.0, - 128.9, - 130.3, - 131.0, - 126.7, - 124.7, - 122.7 - ] - }, - "2":{ - "Description":"Roue-de-diametre-920-mm", - "Reference":"SNCF Juin 2021", - "Spectre":[ - 66.2, - 68.2, - 72.2, - 79.0, - 80.0, - 82.3, - 84.4, - 87.4, - 89.4, - 92.3, - 94.9, - 101.8, - 108.3, - 112.2, - 113.7, - 115.2, - 119.0, - 122.4, - 124.8, - 125.0, - 124.1, - 120.1, - 121.2, - 122.2 - ] - }, - "3":{ - "Description":"Roue-de-diametre-840-mm", - "Reference":"SNCF Juin 2021", - "Spectre":[ - 65.9, - 67.6, - 73.5, - 73.3, - 78.0, - 81.8, - 86.4, - 86.1, - 86.7, - 90.8, - 96.7, - 103.1, - 107.4, - 111.6, - 115.2, - 112.4, - 116.0, - 118.1, - 119.7, - 120.1, - 119.4, - 116.4, - 116.8, - 117.5 - ] - }, - "4":{ - "Description":"Roue-de-diametre-680-mm", - "Reference":"SNCF Juin 2021", - "Spectre":[ - 64.6, - 66.1, - 72.9, - 73.7, - 77.2, - 78.1, - 85.4, - 85.6, - 86.1, - 90.4, - 96.7, - 102.3, - 105.5, - 108.9, - 113.1, - 107.0, - 107.4, - 104.6, - 106.5, - 106.8, - 104.9, - 102.6, - 103.0, - 103.7 - ] - } - }, - "WheelRoughness":{ - "1":{ - "Description":"Freins-semelles-fonte", - "Reference":"SNCF Juin 2021", - "Values":[ - 1.7, - 1.7, - 1.8, - 2.2, - 2.8, - 3.4, - 3.8, - 4.1, - 4.4, - 4.6, - 4.8, - 5.3, - 5.3, - 5.8, - 6.6, - 7.9, - 7.8, - 7, - 5.7, - 3.9, - 1.3, - -0.9, - -2.5, - -4.4, - -6.5, - -8.8, - -11.4, - -12.7, - -13.6, - -14.2, - -14.6, - -14.8, - -15, - -15, - -15 - ] - }, - "2":{ - "Description":"Freins-semelles-composites", - "Reference":"SNCF Juin 2021", - "Values":[ - 2, - 2, - 2, - 2, - 2.1, - 2.1, - 2.1, - 2.1, - 2.1, - 2.1, - 0.6, - 0, - -0.9, - -1.7, - -2.2, - -3.3, - -4.2, - -5.7, - -7.2, - -8.1, - -9.5, - -10.2, - -10.9, - -11.7, - -12.7, - -13.8, - -15.3, - -17.8, - -17.8, - -17.8, - -17.8, - -17.8, - -17.8, - -17.8, - -17.8 - ] - }, - "3":{ - "Description":"Freins-semelles-composites-+-disque", - "Reference":"SNCF Juin 2021", - "Values":[ - -12.5, - -12.5, - -12.5, - -12.5, - -12.5, - -12.5, - -12.5, - -12.5, - -12.5, - -12.5, - -14.5, - -10.9, - -13.3, - -14.8, - -13.5, - -14.3, - -14.7, - -15, - -14.5, - -15, - -14.5, - -14.5, - -16.7, - -17.5, - -17.5, - -17.9, - -18.9, - -20.7, - -20.7, - -20.7, - -20.6, - -20.6, - -20.6, - -20.5, - -20.5 - ] - }, - "4":{ - "Description":"Freins-a-disque", - "Reference":"SNCF Juin 2021", - "Values":[ - 7, - 7, - 7, - 7, - 6.5, - 1, - 2, - 2.4, - 1, - 0.2, - 1.2, - -1.2, - -2.1, - -2.7, - -3.5, - -4.3, - -5.4, - -6.2, - -6.6, - -7, - -7.6, - -7.7, - -8, - -8.5, - -8.9, - -9.5, - -10.8, - -12.1, - -13.7, - -15.8, - -18.3, - -21, - -23.5, - -25.6, - -28 - ] - } - }, - "ContactFilter":{ - "1":{ - "Description":"Charge-a-l-es-sieu-50kN-Diametre-de-roue-360mm", - "Reference":"SNCF Juin 2021", - "Values":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - -0.1, - -0.2, - -0.3, - -0.6, - -1, - -1.8, - -3.2, - -5.4, - -8.7, - -12.2, - -16.7, - -17.7, - -17.8, - -20.7, - -22.1, - -22.8, - -24, - -24.5, - -24.7, - -27, - -27.8 - ] - }, - "2":{ - "Description":"Charge-a-l-es-sieu-50kN-Diametre-de-roue-680mm", - "Reference":"SNCF Juin 2021", - "Values":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - -0.1, - -0.2, - -0.3, - -0.7, - -1.2, - -2, - -4.1, - -6, - -9.2, - -13.8, - -17.2, - -17.7, - -18.6, - -21.5, - -22.3, - -23.1, - -24.4, - -24.5, - -25, - -28, - -28.8, - -29.6 - ] - }, - "3":{ - "Description":"Charge-a-l-es-sieu-25kN-Diametre-de-roue-920mm", - "Reference":"SNCF Juin 2021", - "Values":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - -0.1, - -0.3, - -0.5, - -1.1, - -1.8, - -3.3, - -5.3, - -7.9, - -12.8, - -16.8, - -17.7, - -18.2, - -20.5, - -22, - -22.8, - -24.2, - -24.5, - -25, - -27.4, - -28.2, - -29 - ] - }, - "4":{ - "Description":"Charge-a-l-es-sieu-50kN-Diametre-de-roue-920mm", - "Reference":"SNCF Juin 2021", - "Values":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - -0.1, - -0.1, - -0.3, - -0.6, - -1.1, - -1.3, - -3.5, - -5.3, - -8, - -12, - -16.8, - -17.7, - -18, - -21.5, - -21.8, - -22.8, - -24, - -24.5, - -25, - -27.3, - -28.1, - -28.9, - -29.7 - ] - }, - "5":{ - "Description":"Charge-a-l-es-sieu-100kN-Diametre-de-roue-920mm", - "Reference":"SNCF Juin 2021", - "Values":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - -0.1, - -0.2, - -0.3, - -0.6, - -1, - -1.8, - -3.2, - -5.4, - -8.7, - -12.2, - -16.7, - -17.7, - -17.8, - -20.7, - -22.1, - -22.8, - -24, - -24.5, - -24.7, - -27, - -27.8, - -28.6, - -29.4, - -30.2 - ] - } - }, - "ConstantSpeed":{ - "1":{ - "Description":"Trains-a-grande-vitesse", - "Reference":"SNCF Juin 2021", - "Values":{ - "A":[ - 88.9, - 88.8, - 88.7, - 89.2, - 86.1, - 93.2, - 89.8, - 83.3, - 85.9, - 86.1, - 84.7, - 84, - 82.5, - 83.6, - 80.6, - 80.2, - 78, - 76.4, - 75.5, - 74.4, - 70.8, - 66.7, - 61.5, - 59.5 - ], - "B":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - } - }, - "2":{ - "Description":"Automoteur-type-A", - "Reference":"SNCF Juin 2021", - "Values":{ - "A":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "B":[ - 95.2, - 94.8, - 92.1, - 90.3, - 88.9, - 90, - 91.4, - 95.6, - 96.1, - 91, - 95, - 92.5, - 91, - 91.8, - 90.8, - 89.7, - 88.4, - 87.4, - 86.3, - 82.5, - 80.3, - 78.4, - 72.5, - 70.7 - ] - } - }, - "3":{ - "Description":"Automoteur-type-B", - "Reference":"SNCF Juin 2021", - "Values":{ - "A":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "B":[ - 82.1, - 81.7, - 79.0, - 77.2, - 75.8, - 76.9, - 78.3, - 82.5, - 83.0, - 77.9, - 81.9, - 79.4, - 77.9, - 78.7, - 77.7, - 76.6, - 75.3, - 74.3, - 73.2, - 69.4, - 67.2, - 65.3, - 59.4, - 58.8 - ] - } - }, - "4":{ - "Description":"Automoteur-type-C", - "Reference":"SNCF Juin 2021", - "Values":{ - "B":[ - 88, - 87.5, - 85, - 83.5, - 80.2, - 85.2, - 82.5, - 80.8, - 80.9, - 76.6, - 77.5, - 77, - 75.9, - 75.6, - 75.5, - 75.2, - 73.3, - 70.5, - 69.6, - 67.6, - 65.4, - 63.3, - 56.9, - 55.4 - ], - "A":[ - 69.7, - 69.7, - 69.7, - 77.9, - 74.5, - 79.9, - 74.4, - 69.4, - 69, - 67.9, - 67.8, - 66.5, - 65.4, - 64.9, - 64.5, - 63.4, - 62.3, - 60.8, - 67.5, - 65.5, - 59.7, - 58, - 57.9, - 57.8 - ] - } - }, - "5":{ - "Description":"Automoteur-type-D", - "Reference":"SNCF Juin 2021", - "Values":{ - "A":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "B":[ - 77.5, - 77, - 75.6, - 80.3, - 79, - 78.1, - 79.1, - 78.6, - 76.9, - 75.9, - 73.8, - 74.4, - 73.8, - 75, - 75.3, - 69.1, - 69, - 68.3, - 66.3, - 63.6, - 60.6, - 57.9, - 55.5, - 55.1 - ] - } - }, - "6":{ - "Description":"Automoteur-type-E", - "Reference":"SNCF Juin 2021", - "Values":{ - "A":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "B":[ - 78.8, - 79.5, - 85.1, - 89.2, - 84.7, - 83.4, - 83.9, - 86.9, - 85.3, - 80.9, - 79.4, - 80.8, - 82.7, - 79.7, - 77.8, - 77.2, - 77.6, - 74.8, - 73.8, - 72.6, - 66.8, - 63.8, - 59, - 58.6 - ] - } - }, - "7":{ - "Description":"Automoteur-type-F", - "Reference":"SNCF Juin 2021", - "Values":{ - "A":[ - 93.3, - 94.7, - 100.3, - 104.4, - 99.9, - 98.6, - 99.1, - 102.1, - 100.5, - 96.1, - 94.6, - 96.1, - 97.9, - 95, - 93, - 92.4, - 92.8, - 90, - 89.1, - 87.8, - 82.1, - 79, - 74.2, - 73.7 - ], - "B":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - } - }, - "8":{ - "Description":"Automoteur-type-G", - "Reference":"SNCF Juin 2021", - "Values":{ - "A":[ - 88.5, - 90.5, - 96.1, - 100.2, - 95.7, - 94.4, - 94.9, - 97.9, - 96.3, - 91.9, - 90.4, - 91.9, - 93.7, - 90.8, - 88.8, - 88.2, - 88.6, - 85.8, - 84.9, - 83.6, - 77.9, - 74.8, - 70, - 68.1 - ], - "B":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - } - }, - "9":{ - "Description":"Automoteur-type-H", - "Reference":"SNCF Juin 2021", - "Values":{ - "A":[ - 61.4, - 61.8, - 62.6, - 65, - 69.4, - 73.3, - 71.6, - 70.9, - 76.3, - 75.2, - 76, - 75.6, - 83.5, - 76.9, - 72.8, - 73.1, - 73.6, - 68.9, - 66.2, - 64.1, - 62.4, - 54.8, - 43.4, - 39.6 - ], - "B":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - } - }, - "10":{ - "Description":"Rames-remorquees", - "Reference":"SNCF Juin 2021", - "Values":{ - "A":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "B":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - } - }, - "11":{ - "Description":"Voitures-remorquees-type-A", - "Reference":"SNCF Juin 2021", - "Values":{ - "A":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "B":[ - 82.1, - 81.4, - 78.7, - 76.9, - 75.5, - 76.6, - 78, - 82.2, - 82.7, - 77.6, - 81.6, - 79.1, - 77.6, - 78.4, - 77.4, - 76.3, - 75, - 74, - 72.9, - 69.1, - 66.9, - 65, - 59.1, - 57.8 - ] - } - }, - "12":{ - "Description":"Voitures-remorquees-type-B", - "Reference":"SNCF Juin 2021", - "Values":{ - "A":[ - 66.7, - 67.2, - 68, - 70.4, - 74.8, - 78.7, - 77, - 76.3, - 81.7, - 80.6, - 81.4, - 81, - 88.9, - 82.3, - 78.2, - 78.5, - 79, - 74.3, - 71.6, - 69.5, - 67.8, - 60.2, - 48.8, - 46.6 - ], - "B":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - } - }, - "13":{ - "Description":"Tram-train", - "Reference":"SNCF Juin 2021", - "Values":{ - "A":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "B":[ - 78.2, - 78, - 77.7, - 78.4, - 75.8, - 80.6, - 82.1, - 82.6, - 80, - 77.2, - 76.2, - 74.8, - 75.1, - 73.9, - 71.4, - 70.9, - 69.6, - 67.5, - 66.5, - 60.1, - 58.2, - 54.7, - 50.7, - 48.6 - ] - } - }, - "14":{ - "Description":"Locomotive-type-A", - "Reference":"SNCF Juin 2021", - "Values":{ - "A":[ - 96.4, - 96.7, - 97.2, - 91.5, - 92.1, - 89.9, - 89.2, - 88.6, - 88.6, - 90.2, - 91.8, - 92.3, - 90, - 90.2, - 88.3, - 84.6, - 86.2, - 78.6, - 74.7, - 71, - 70.2, - 70, - 66.8, - 65.7 - ], - "B":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - } - }, - "15":{ - "Description":"Locomotive-type-B", - "Reference":"SNCF Juin 2021", - "Values":{ - "A":[ - 90.9, - 90.5, - 89.2, - 87.1, - 87.3, - 84.5, - 88.2, - 92.3, - 96, - 89.6, - 92.8, - 87.9, - 87.1, - 87.7, - 86.4, - 84.6, - 86, - 83.3, - 86.9, - 76.7, - 75, - 71.4, - 66.2, - 64.8 - ], - "B":[ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - } - } - }, - "AerodynamicNoise":{ - "1":{ - "DescriptionA":"LW.0-1", - "DescriptionB":"LW.0-2", - "V0":300, - "Alpha":50, - "Reference":"SNCF Juin 2021", - "Values":{ - "A":[ - 101.2, - 102.4, - 100.9, - 101.2, - 100.4, - 100.8, - 103.4, - 106.1, - 106.8, - 107.1, - 107.9, - 106.3, - 89.8, - 87.2, - 84.3, - 81.2, - 77.6, - 75, - 68.8, - 29.2, - -14, - -13.9, - -15.7, - -15.8 - ], - "B":[ - 110.2, - 111.3, - 112.6, - 113.7, - 112.7, - 111.1, - 111.1, - 110.2, - 110.8, - 111.1, - 111, - 109.4, - 107.3, - 106.1, - 100.6, - 97.7, - 91.6, - 65.1, - 13.8, - -7.8, - -7.6, - -7, - -13, - -13.7 - ] - } - } - } - }, - "Track":{ - "TrackTransfer":{ - "1":{ - "Description":"Traverse-monobloc-sur-semelle-souple", - "Reference":"SNCF Juin 2021", - "Spectre":[ - 42.1, - 45.3, - 49.4, - 53.9, - 59.3, - 66.1, - 74.5, - 80.6, - 80.7, - 79.6, - 83, - 90.3, - 98.8, - 101.6, - 101.9, - 103.6, - 104.9, - 105.8, - 106.7, - 107.6, - 108.5, - 108.2, - 108.3, - 108.8 - ] - }, - "2":{ - "Description":"Traverse-monobloc-sur-semelle-de-rigite-moyenne", - "Reference":"SNCF Juin 2021", - "Spectre":[ - 34.6, - 40.9, - 47.4, - 52.9, - 58.8, - 65.3, - 72.7, - 77.4, - 81.4, - 83.3, - 83.9, - 88.5, - 97.5, - 101.4, - 103, - 103.8, - 105.3, - 105.9, - 106.1, - 106.4, - 106.9, - 106.9, - 107.3, - 108 - ] - }, - "3":{ - "Description":"Traverse-monobloc-sur-semelle-ri-ge", - "Reference":"SNCF Juin 2021", - "Spectre":[ - 32.5, - 39.4, - 46.6, - 53.2, - 59.1, - 65.5, - 72.3, - 79.1, - 86.2, - 89.3, - 87.9, - 88.5, - 94.4, - 98.4, - 99.1, - 102.6, - 103.8, - 104.6, - 104.9, - 105.4, - 106.1, - 106.4, - 107.1, - 108.1 - ] - }, - "4":{ - "Description":"Traverse-bibloc-sur-semelle-souple", - "Reference":"SNCF Juin 2021", - "Spectre":[ - 29.2, - 37, - 45, - 52.3, - 59.8, - 65.6, - 70.8, - 73.4, - 76.7, - 82, - 85.5, - 90.4, - 99.1, - 102.4, - 103, - 104.7, - 105.3, - 105.3, - 105.3, - 105.3, - 105.3, - 105.3, - 105.3, - 105.3 - ] - }, - "5":{ - "Description":"Traverse-bibloc-sur-semelle-de-rigite-moyenne", - "Reference":"SNCF Juin 2021", - "Spectre":[ - 34.4, - 41, - 47.7, - 53.2, - 59.4, - 64.5, - 70, - 75.7, - 80.3, - 82.6, - 84.7, - 89.1, - 98.1, - 102.5, - 104.3, - 105.1, - 106.8, - 107.3, - 107.4, - 107.7, - 108, - 107.8, - 108, - 108.5 - ] - }, - "6":{ - "Description":"Traverse-bibloc-sur-semelle-ri-ge", - "Reference":"SNCF Juin 2021", - "Spectre":[ - 14.7, - 26.3, - 38.4, - 49.1, - 60.1, - 64.7, - 68.6, - 73.9, - 80.5, - 87, - 88.5, - 85.2, - 90.1, - 97, - 98.5, - 101.1, - 103, - 103.5, - 103.7, - 104.1, - 104.6, - 104.6, - 104.9, - 105.6 - ] - }, - "7":{ - "Description":"Traverse-en-bois", - "Reference":"SNCF Juin 2021", - "Spectre":[ - 44, - 51, - 59.9, - 65.4, - 70.6, - 74.7, - 79.3, - 83.3, - 86.7, - 89.6, - 92.4, - 98.7, - 106.1, - 109.5, - 111.9, - 113.2, - 113, - 112.9, - 112.8, - 112.7, - 112.6, - 112.6, - 112.6, - 112.6 - ] - }, - "8":{ - "Description":"Fixation-directe-sur-les-ponts-métalliques-(pose-ans-ballast)", - "Reference":"SNCF Fevrier 2022", - "Spectre":[ - 91.4, - 92.7, - 95.8, - 101.2, - 100.5, - 101.2, - 101.4, - 102.5, - 102.6, - 103.4, - 103.4, - 107.3, - 111.0, - 111.4, - 109.3, - 107.4, - 107.4, - 107.1, - 106.4, - 104.1, - 100.7, - 94.4, - 93.2, - 91.7 - - ] - } - }, - "RailRoughness":{ - "1":{ - "Description":"Lignes-Classiques", - "Reference":"SNCF Juin 2021", - "Values":[ - 17.1, - 17.1, - 17.1, - 17.1, - 17.1, - 17.1, - 17.1, - 17.1, - 15, - 13, - 11, - 9, - 5.9, - 4.2, - 2, - -0.4, - -2.6, - -4.8, - -7.1, - -8.4, - -9.5, - -10.6, - -12, - -12.9, - -14, - -15.2, - -16.3, - -17.4, - -20.5, - -22.8, - -24.5, - -25.9, - -27.2, - -27.9, - -28.5 - ] - }, - "2":{ - "Description":"LGV", - "Reference":"SNCF Juin 2021", - "Values":[ - 11.3, - 10.2, - 9.1, - 7.9, - 6.6, - 5.3, - 4, - 2.8, - 1.5, - 0.2, - -1, - -2.3, - -3.9, - -4.9, - -6.1, - -7.1, - -7.6, - -8.1, - -8.6, - -9.1, - -9.6, - -10, - -10.7, - -11.1, - -11.6, - -12.6, - -13.7, - -15.4, - -17.8, - -20, - -22.1, - -24.1, - -26.4, - -28.3, - -30.3 - ] - } - }, - "ImpactNoise":{ - "1":{ - "Description":"Aiguillage/joint/croisement/100m", - "Reference":"SNCF Juin 2021", - "Values":[ - 18.0, - 18.0, - 18.0, - 18.0, - 18.0, - 16.0, - 12.0, - 11.0, - 10.0, - 11.0, - 10.0, - 8.0, - 7.0, - 6.0, - 5.0, - 4.0, - 2.0, - -1.0, - -2.0, - -7.0, - -12.0, - -17.0, - -21.0, - -23.0, - -26.0, - -29.0, - -30.0, - -36.0, - -39.0, - -44.0, - -47.0, - -49.0, - -51.0, - -53.0, - -54.0 - ] - } - }, - "BrgeConstant":{ - "1":{ - "Description":"Tout-type-de-pont-hors-ponts-metalliques-avec-voies-non-ballastees", - "Reference":"SNCF Juin 2021", - "Values":0 - }, - "2":{ - "Description":"Ponts-metalliques-avec-voies-non-ballastees", - "Reference":"SNCF Juin 2021", - "Values":5 - } - } - } -} \ No newline at end of file diff --git a/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/railway/RailwayCnossosEU_2020.json b/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/railway/RailwayCnossosEU_2020.json new file mode 100644 index 000000000..c9afba3bd --- /dev/null +++ b/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/railway/RailwayCnossosEU_2020.json @@ -0,0 +1,4672 @@ +{ + "Vehicle": { + "Transfer": { + "0": { + "Default": "true", + "Reference": "", + "Description": "Empty vehicle transfer function", + "WheelDiameter": null, + "WheelDiameterCode": null, + "Spectre": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "1": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "min", + "WheelDiameter": null, + "WheelDiameterCode": null, + "Spectre": [ + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60, + 60 + ] + }, + "2": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "max", + "WheelDiameter": null, + "WheelDiameterCode": null, + "Spectre": [ + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140 + ] + }, + "3": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Wheel with diameter 920 mm, no measure", + "WheelDiameter": 920, + "WheelDiameterCode": null, + "Spectre": [ + 75.4, + 77.3, + 81.1, + 84.1, + 83.3, + 84.3, + 86, + 90.1, + 89.8, + 89, + 88.8, + 90.4, + 92.4, + 94.9, + 100.4, + 104.6, + 109.6, + 114.9, + 115, + 115, + 115.5, + 115.6, + 116, + 116.7 + ] + }, + "4": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Wheel with diameter 840 mm, no measure", + "WheelDiameter": 840, + "WheelDiameterCode": null, + "Spectre": [ + 75.4, + 77.3, + 81.1, + 84.1, + 82.8, + 83.3, + 84.1, + 86.9, + 87.9, + 89.9, + 90.9, + 91.5, + 91.5, + 93, + 98.7, + 101.6, + 107.6, + 111.9, + 114.5, + 114.5, + 115, + 115.1, + 115.5, + 116.2 + ] + }, + "5": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Wheel with diameter 680 mm, no measure", + "WheelDiameter": 680, + "WheelDiameterCode": null, + "Spectre": [ + 75.4, + 77.3, + 81.1, + 84.1, + 82.8, + 83.3, + 83.9, + 86.3, + 88, + 92.2, + 93.9, + 92.5, + 90.9, + 90.4, + 93.2, + 93.5, + 99.6, + 104.9, + 108, + 111, + 111.5, + 111.6, + 112, + 112.7 + ] + }, + "6": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Wheel with diameter 1200 mm, no measure", + "WheelDiameter": 1200, + "WheelDiameterCode": null, + "Spectre": [ + 75.4, + 77.3, + 81.1, + 84.1, + 82.8, + 83.3, + 84.5, + 90.4, + 90.4, + 89.9, + 90.1, + 91.3, + 91.5, + 93.6, + 100.5, + 104.6, + 115.6, + 115.9, + 116, + 116, + 116.5, + 116.6, + 117, + 117.7 + ] + } + }, + "WheelRoughness": { + "0": { + "Default": "true", + "Reference": "", + "Description": "Empty wheel roughness", + "Values": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "1": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "min", + "Values": [ + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15 + ] + }, + "2": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "max", + "Values": [ + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25, + 25 + ] + }, + "3": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "cast iron tread", + "Values": [ + 2.1684615861341738, + 2.1684615861341738, + 2.1684615861341738, + 2.1684615861341738, + 2.1684615861341738, + 2.1684615861341738, + 2.1684615861341738, + 2.1684615861341738, + 2.1684615861341738, + 2.1684615861341738, + 2.1684615861341738, + 2.3670045893225948, + 0.614781263900754, + 2.610924413363449, + 5.7565285612028694, + 8.7784615861341742, + 11.110011512915291, + 10.95837155865965, + 9.7914593750572188, + 7.4916045909735924, + 5.148695207491488, + 3.0225898933653781, + 1.28616199715323, + 0.167997434442427, + -0.702413370803574, + -1.167439464293351, + -1.02041103167661, + 0.271557355244967, + 0.238403459692385, + 1.321311142906995, + 3.0971084574824519, + 3.0971084574824519, + 3.0971084574824519, + 3.0971084574824519, + 3.0971084574824519 + ] + }, + "4": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "composite", + "Values": [ + -3.95419018689975, + -3.95419018689975, + -3.95419018689975, + -3.95419018689975, + -3.95419018689975, + -3.95419018689975, + -3.95419018689975, + -3.95419018689975, + -3.95419018689975, + -3.95419018689975, + -3.95419018689975, + -3.95419018689975, + -3.95419018689975, + -3.95419018689975, + -4.3412995373955434, + -4.6209747678376347, + -4.8970550260649537, + -5.2224362812888314, + -6.3085781677861847, + -6.7984677237975282, + -7.2402633550228694, + -7.2696246754264786, + -7.2712957865790546, + -7.1399677582660583, + -6.9377366276182171, + -6.6786309297519, + -5.9913699638957461, + -3.7486765781060192, + -2.3766929885287151, + -2.590206897753383, + -2.4644302787172032, + -2.4644302787172032, + -2.4644302787172032, + -2.4644302787172032, + -2.4644302787172032 + ] + }, + "5": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "disc brake", + "Values": [ + -5.93, + -5.93, + -5.93, + -5.93, + -5.93, + -5.93, + -5.93, + -5.93, + -5.93, + 2.32, + 2.82, + 2.56, + 1.22, + 2.06, + 0.92, + -0.25, + -1.57, + -2.85, + -4.94, + -7, + -8.58, + -9.32, + -9.51, + -10.12, + -10.25, + -10.33, + -10.81, + -10.91, + -9.52, + -9.52, + -9.52, + -9.52, + -9.52, + -9.52, + -9.52 + ] + } + }, + "ContactFilter": { + "0": { + "Default": "true", + "Reference": null, + "Description": "Empty contact filter", + "Load": null, + "WheelDiameter": null, + "WheelDiameterCode": null, + "Values": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "1": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "min", + "Load": null, + "WheelDiameter": null, + "WheelDiameterCode": null, + "Values": [ + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30, + -30 + ] + }, + "2": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "max", + "Load": null, + "WheelDiameter": null, + "WheelDiameterCode": null, + "Values": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "3": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Wheel load 50kN wheel diameter 360mm", + "Load": "50", + "WheelDiameter": "360", + "WheelDiameterCode": "small, <500mm", + "Values": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + -0.1, + -0.2, + -0.3, + -0.6, + -1.0, + -1.8, + -3.2, + -5.4, + -8.7, + -12.2, + -16.7, + -17.7, + -17.8, + -20.7, + -22.1, + -22.8, + -24.0, + -24.5, + -24.7, + -27.0, + -27.8 + ] + }, + "4": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Wheel load 50kN wheel diameter 680mm", + "Load": "50", + "WheelDiameter": "680", + "WheelDiameterCode": "medium, 500 to 800mm", + "Values": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + -0.1, + -0.2, + -0.3, + -0.7, + -1.2, + -2.0, + -4.1, + -6.0, + -9.2, + -13.8, + -17.2, + -17.7, + -18.6, + -21.5, + -22.3, + -23.1, + -24.4, + -24.5, + -25.0, + -28.0, + -28.8, + -29.6 + ] + }, + "5": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Wheel load 25kN wheel diameter 920mm", + "Load": "25", + "WheelDiameter": "920", + "WheelDiameterCode": "large, >800mm", + "Values": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + -0.1, + -0.3, + -0.5, + -1.1, + -1.8, + -3.3, + -5.3, + -7.9, + -12.8, + -16.8, + -17.7, + -18.2, + -20.5, + -22.0, + -22.8, + -24.2, + -24.5, + -25.0, + -27.4, + -28.2, + -29.0 + ] + }, + "6": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Wheel load 50kN wheel diameter 920mm", + "Load": "50", + "WheelDiameter": "920", + "WheelDiameterCode": "large, >800mm", + "Values": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + -0.1, + -0.1, + -0.3, + -0.6, + -1.1, + -1.3, + -3.5, + -5.3, + -8.0, + -12.0, + -16.8, + -17.7, + -18.0, + -21.5, + -21.8, + -22.8, + -24.0, + -24.5, + -25.0, + -27.3, + -28.1, + -28.9, + -29.7 + ] + }, + "7": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Wheel load 100kN wheel diameter 920mm", + "Load": "100", + "WheelDiameter": "920", + "WheelDiameterCode": "large, >800mm", + "Values": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + -0.1, + -0.2, + -0.3, + -0.6, + -1.0, + -1.8, + -3.2, + -5.4, + -8.7, + -12.2, + -16.7, + -17.7, + -17.8, + -20.7, + -22.1, + -22.8, + -24.0, + -24.5, + -24.7, + -27.0, + -27.8, + -28.6, + -29.4, + -30.2 + ] + } + }, + "ConstantSpeed": { + "0": { + "Default": "true", + "Reference": null, + "Description": "Empty traction", + "Values": { + "A": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "B": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "1": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "min", + "Values": { + "A": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "B": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "2": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "max", + "Values": { + "A": [ + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140 + ], + "B": [ + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140 + ] + } + }, + "3": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Diesel locomotive (c. 800kW)", + "Values": { + "A": [ + 98.8613, + 94.7613, + 92.5613, + 94.5613, + 92.7613, + 92.7613, + 92.9613, + 94.7613, + 94.5613, + 95.6613, + 95.5613, + 98.5613, + 95.1613, + 95.0613, + 95.0613, + 94.0613, + 94.0613, + 99.3613, + 92.4613, + 89.4613, + 86.9613, + 84.0613, + 81.4613, + 79.1613 + ], + "B": [ + 103.1613, + 99.9613, + 95.4613, + 93.9613, + 93.2613, + 93.5613, + 92.8613, + 92.6613, + 92.3613, + 92.7613, + 92.7613, + 96.7613, + 92.6613, + 92.9613, + 92.8613, + 93.0613, + 93.1613, + 98.2613, + 91.4613, + 88.6613, + 85.9613, + 83.3613, + 80.8613, + 78.6613 + ] + } + }, + "4": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Diesel locomotive (c. 2200kW)", + "Values": { + "A": [ + 99.4103, + 107.3103, + 103.1103, + 102.1103, + 99.3103, + 99.3103, + 99.5103, + 101.3103, + 101.1103, + 102.2103, + 102.1103, + 101.1103, + 101.7103, + 101.6103, + 99.3103, + 96.0103, + 93.7103, + 101.9103, + 89.5103, + 87.1103, + 90.5103, + 31.4103, + 81.2103, + 79.6103 + ], + "B": [ + 103.7103, + 112.5103, + 106.0103, + 101.5103, + 99.8103, + 100.1103, + 99.4103, + 99.2103, + 98.9103, + 99.3103, + 99.3103, + 99.3103, + 99.2103, + 99.5103, + 97.1103, + 95.0103, + 92.8103, + 100.8103, + 88.5103, + 86.3103, + 89.5103, + 30.7103, + 80.6103, + 79.1103 + ] + } + }, + "5": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Diesel loc/RENFE Dloco/1155kW", + "Values": { + "A": [ + 99.3003, + 103.2003, + 109.0003, + 114.0003, + 109.2003, + 106.2003, + 103.4003, + 105.2003, + 105.0003, + 106.1003, + 106.0003, + 105.0003, + 105.6003, + 104.5003, + 102.9003, + 99.4003, + 96.8003, + 94.6003, + 92.1003, + 89.6003, + 87.5003, + 85.1003, + 82.9003, + 81.1003 + ], + "B": [ + 103.6003, + 108.4003, + 111.9003, + 113.4003, + 109.7003, + 107.0003, + 103.3003, + 103.1003, + 102.8003, + 103.2003, + 103.2003, + 103.2003, + 103.1003, + 102.4003, + 100.7003, + 98.4003, + 95.9003, + 93.5003, + 91.1003, + 88.8003, + 86.5003, + 84.4003, + 82.3003, + 80.6003 + ] + } + }, + "6": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Diesel loc/NS6400 Dloco/1180kW", + "Values": { + "A": [ + 100.9836, + 89.8836, + 92.6836, + 104.6836, + 94.8836, + 87.8836, + 83.0836, + 84.8836, + 84.6836, + 85.7836, + 85.6836, + 84.6836, + 85.2836, + 85.1836, + 85.1836, + 84.1836, + 84.1836, + 84.4836, + 81.5836, + 78.5836, + 76.0836, + 73.1836, + 70.5836, + 68.2836 + ], + "B": [ + 105.2836, + 95.0836, + 95.5836, + 104.0836, + 95.3836, + 88.6836, + 82.9836, + 82.7836, + 82.4836, + 82.8836, + 82.8836, + 82.8836, + 82.7836, + 83.0836, + 82.9836, + 83.1836, + 83.2836, + 83.3836, + 80.5836, + 77.7836, + 75.0836, + 72.4836, + 69.9836, + 67.7836 + ] + } + }, + "7": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Diesel loc/TKOJ JT42CWR/Class66/2200kW", + "Values": { + "A": [ + 95.432, + 104.332, + 102.132, + 99.132, + 93.332, + 96.332, + 96.532, + 98.332, + 98.132, + 99.232, + 99.132, + 98.132, + 98.732, + 96.632, + 94.632, + 91.632, + 89.632, + 87.932, + 86.032, + 84.032, + 82.532, + 80.632, + 79.032, + 77.732 + ], + "B": [ + 99.732, + 109.532, + 105.032, + 98.532, + 93.832, + 97.132, + 96.432, + 96.232, + 95.932, + 96.332, + 96.332, + 96.332, + 96.232, + 94.532, + 92.432, + 90.632, + 88.732, + 86.832, + 85.032, + 83.232, + 81.532, + 79.932, + 78.432, + 77.232 + ] + } + }, + "8": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Diesel multiple unit", + "Values": { + "A": [ + 82.583, + 82.483, + 89.283, + 90.283, + 93.483, + 99.483, + 98.683, + 95.483, + 90.283, + 91.383, + 91.283, + 90.283, + 90.883, + 91.783, + 92.783, + 92.783, + 90.783, + 88.083, + 85.183, + 83.183, + 81.683, + 78.783, + 76.183, + 73.883 + ], + "B": [ + 86.883, + 87.683, + 92.183, + 89.683, + 93.983, + 100.283, + 98.583, + 93.383, + 88.083, + 88.483, + 88.483, + 88.483, + 88.383, + 89.683, + 90.583, + 91.783, + 89.883, + 86.983, + 84.183, + 82.383, + 80.683, + 78.083, + 75.583, + 73.383 + ] + } + }, + "9": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Electric locomotive", + "Values": { + "A": [ + 87.8551, + 90.7551, + 91.5551, + 94.5551, + 94.7551, + 96.7551, + 103.9551, + 100.7551, + 99.5551, + 101.6551, + 98.5551, + 95.5551, + 95.1551, + 96.0551, + 92.0551, + 89.0551, + 87.0551, + 85.3551, + 83.4551, + 81.4551, + 79.9551, + 78.0551, + 76.4551, + 75.1551 + ], + "B": [ + 92.1551, + 95.9551, + 94.4551, + 93.9551, + 95.2551, + 97.5551, + 103.8551, + 98.6551, + 97.3551, + 98.7551, + 95.7551, + 93.7551, + 92.6551, + 93.9551, + 89.8551, + 88.0551, + 86.1551, + 84.2551, + 82.4551, + 80.6551, + 78.9551, + 77.3551, + 75.8551, + 74.6551 + ] + } + }, + "10": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Electric multiple unit ", + "Values": { + "A": [ + 80.5497, + 81.4497, + 80.5497, + 82.2497, + 80.0497, + 79.7497, + 79.6497, + 96.4497, + 80.5497, + 81.3497, + 97.2497, + 79.5497, + 79.8497, + 86.7497, + 81.7497, + 82.7497, + 80.7497, + 78.0497, + 75.1497, + 72.1497, + 69.6497, + 66.7497, + 64.1497, + 61.8497 + ], + "B": [ + 84.8497, + 86.6497, + 83.4497, + 81.6497, + 80.5497, + 80.5497, + 79.5497, + 94.3497, + 78.3497, + 78.4497, + 94.4497, + 77.7497, + 77.3497, + 84.6497, + 79.5497, + 81.7497, + 79.8497, + 76.9497, + 74.1497, + 71.3497, + 68.6497, + 66.0497, + 63.5497, + 61.3497 + ] + } + } + }, + "AccelerationSpeed": { + "0": { + "Default": "true", + "Reference": null, + "Description": "Empty traction", + "Values": { + "A": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "B": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "1": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "min", + "Values": { + "A": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "B": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "2": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "max", + "Values": { + "A": [ + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140 + ], + "B": [ + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140 + ] + } + }, + "3": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Diesel locomotive (c. 800kW)", + "Values": { + "A": [ + 96.8613, + 102.7613, + 100.5613, + 97.5613, + 95.7613, + 95.7613, + 95.9613, + 97.7613, + 97.5613, + 98.6613, + 98.5613, + 102.5613, + 98.1613, + 98.0613, + 98.0613, + 97.0613, + 97.0613, + 97.3613, + 105.4613, + 97.4613, + 94.9613, + 92.0613, + 89.4613, + 87.1613 + ], + "B": [ + 101.1613, + 107.9613, + 103.4613, + 96.9613, + 96.2613, + 96.5613, + 95.8613, + 95.6613, + 95.3613, + 95.7613, + 95.7613, + 100.7613, + 95.6613, + 95.9613, + 95.8613, + 96.0613, + 96.1613, + 96.2613, + 104.4613, + 96.6613, + 93.9613, + 91.3613, + 88.8613, + 86.6613 + ] + } + }, + "4": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Diesel locomotive (c. 2200kW)", + "Values": { + "A": [ + 99.4103, + 102.3103, + 113.1103, + 107.1103, + 103.3103, + 102.3103, + 102.5103, + 104.3103, + 104.1103, + 105.2103, + 105.1103, + 104.1103, + 104.7103, + 104.6103, + 102.3103, + 99.0103, + 96.7103, + 94.7103, + 105.0103, + 90.1103, + 88.3103, + 93.6103, + 84.2103, + 82.6103 + ], + "B": [ + 103.7103, + 107.5103, + 116.0103, + 106.5103, + 103.8103, + 103.1103, + 102.4103, + 102.2103, + 101.9103, + 102.3103, + 102.3103, + 102.3103, + 102.2103, + 102.5103, + 100.1103, + 98.0103, + 95.8103, + 93.6103, + 104.0103, + 89.3103, + 87.3103, + 92.9103, + 83.6103, + 82.1103 + ] + } + }, + "5": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Diesel loc/RENFE Dloco/1155kW", + "Values": { + "A": [ + 99.3003, + 103.2003, + 109.0003, + 114.0003, + 115.2003, + 112.2003, + 109.4003, + 108.2003, + 108.0003, + 109.1003, + 109.0003, + 108.0003, + 108.6003, + 108.5003, + 107.5003, + 104.9003, + 102.4003, + 100.1003, + 97.7003, + 95.1003, + 93.1003, + 90.6003, + 88.5003, + 86.6003 + ], + "B": [ + 103.6003, + 108.4003, + 111.9003, + 113.4003, + 115.7003, + 113.0003, + 109.3003, + 106.1003, + 105.8003, + 106.2003, + 106.2003, + 106.2003, + 106.1003, + 106.4003, + 105.3003, + 103.9003, + 101.5003, + 99.0003, + 96.7003, + 94.3003, + 92.1003, + 89.9003, + 87.9003, + 86.1003 + ] + } + }, + "6": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Diesel loc/NS6400 Dloco/1180kW", + "Values": { + "A": [ + 98.9836, + 104.8836, + 95.6836, + 97.6836, + 105.8836, + 97.8836, + 91.0836, + 87.8836, + 87.6836, + 88.7836, + 88.6836, + 87.6836, + 88.2836, + 88.1836, + 88.1836, + 87.1836, + 87.1836, + 87.4836, + 87.5836, + 84.5836, + 82.0836, + 79.1836, + 76.5836, + 74.2836 + ], + "B": [ + 103.2836, + 110.0836, + 98.5836, + 97.0836, + 106.3836, + 98.6836, + 90.9836, + 85.7836, + 85.4836, + 85.8836, + 85.8836, + 85.8836, + 85.7836, + 86.0836, + 85.9836, + 86.1836, + 86.2836, + 86.3836, + 86.5836, + 83.7836, + 81.0836, + 78.4836, + 75.9836, + 73.7836 + ] + } + }, + "7": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Diesel loc/TKOJ JT42CWR/Class66/2200kW", + "Values": { + "A": [ + 91.432, + 99.332, + 110.132, + 107.132, + 100.332, + 96.332, + 99.532, + 101.332, + 101.132, + 102.232, + 102.132, + 101.132, + 101.732, + 101.632, + 99.632, + 96.632, + 94.632, + 92.932, + 91.032, + 89.032, + 87.532, + 85.632, + 84.032, + 82.732 + ], + "B": [ + 95.732, + 104.532, + 113.032, + 106.532, + 100.832, + 97.132, + 99.432, + 99.232, + 98.932, + 99.332, + 99.332, + 99.332, + 99.232, + 99.532, + 97.432, + 95.632, + 93.732, + 91.832, + 90.032, + 88.232, + 86.532, + 84.932, + 83.432, + 82.232 + ] + } + }, + "8": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Diesel multiple unit", + "Values": { + "A": [ + 80.583, + 86.483, + 88.283, + 94.283, + 91.483, + 96.483, + 102.683, + 103.483, + 98.283, + 94.383, + 94.283, + 93.283, + 93.883, + 93.783, + 94.783, + 94.783, + 95.783, + 94.083, + 91.183, + 88.183, + 86.683, + 84.783, + 82.183, + 79.883 + ], + "B": [ + 84.883, + 91.683, + 91.183, + 93.683, + 91.983, + 97.283, + 102.583, + 101.383, + 96.083, + 91.483, + 91.483, + 91.483, + 91.383, + 91.683, + 92.583, + 93.783, + 94.883, + 92.983, + 90.183, + 87.383, + 85.683, + 84.083, + 81.583, + 79.383 + ] + } + }, + "9": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Electric locomotive", + "Values": { + "A": [ + 87.8551, + 94.7551, + 91.5551, + 94.5551, + 94.7551, + 96.7551, + 107.9551, + 100.7551, + 99.5551, + 105.6551, + 98.5551, + 95.5551, + 95.1551, + 100.0551, + 92.0551, + 89.0551, + 87.0551, + 85.3551, + 83.4551, + 81.4551, + 79.9551, + 78.0551, + 76.4551, + 75.1551 + ], + "B": [ + 92.1551, + 99.9551, + 94.4551, + 93.9551, + 95.2551, + 97.5551, + 107.8551, + 98.6551, + 97.3551, + 102.7551, + 95.7551, + 93.7551, + 92.6551, + 97.9551, + 89.8551, + 88.0551, + 86.1551, + 84.2551, + 82.4551, + 80.6551, + 78.9551, + 77.3551, + 75.8551, + 74.6551 + ] + } + }, + "10": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Electric multiple unit ", + "Values": { + "A": [ + 80.5497, + 81.4497, + 80.5497, + 82.2497, + 94.4497, + 79.7497, + 79.6497, + 96.4497, + 80.5497, + 81.3497, + 80.8497, + 79.5497, + 79.8497, + 86.7497, + 81.7497, + 82.7497, + 80.7497, + 78.0497, + 75.1497, + 72.1497, + 69.6497, + 66.7497, + 64.1497, + 61.8497 + ], + "B": [ + 84.8497, + 86.6497, + 83.4497, + 81.6497, + 94.9497, + 80.5497, + 79.5497, + 94.3497, + 78.3497, + 78.4497, + 78.0497, + 77.7497, + 77.3497, + 84.6497, + 79.5497, + 81.7497, + 79.8497, + 76.9497, + 74.1497, + 71.3497, + 68.6497, + 66.0497, + 63.5497, + 61.3497 + ] + } + } + }, + "DecelerationSpeed": { + "0": { + "Default": "true", + "Reference": null, + "Description": "Empty traction", + "Values": { + "A": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "B": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "1": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "min", + "Values": { + "A": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "B": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "2": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "max", + "Values": { + "A": [ + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140 + ], + "B": [ + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140 + ] + } + }, + "3": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Diesel locomotive (c. 800kW)", + "Values": { + "A": [ + 87.8613, + 83.7613, + 86.5613, + 88.5613, + 86.7613, + 86.7613, + 86.9613, + 88.7613, + 88.5613, + 89.6613, + 89.5613, + 93.5613, + 89.1613, + 89.0613, + 89.0613, + 88.0613, + 88.0613, + 86.3613, + 83.4613, + 80.4613, + 77.9613, + 75.0613, + 72.4613, + 70.1613 + ], + "B": [ + 92.1613, + 88.9613, + 89.4613, + 87.9613, + 87.2613, + 87.5613, + 86.8613, + 86.6613, + 86.3613, + 86.7613, + 86.7613, + 91.7613, + 86.6613, + 86.9613, + 86.8613, + 87.0613, + 87.1613, + 85.2613, + 82.4613, + 79.6613, + 76.9613, + 74.3613, + 71.8613, + 69.6613 + ] + } + }, + "4": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Diesel locomotive (c. 2200kW)", + "Values": { + "A": [ + 89.4103, + 90.3103, + 103.1103, + 95.1103, + 93.3103, + 93.3103, + 93.5103, + 95.3103, + 95.1103, + 96.2103, + 96.1103, + 95.1103, + 95.7103, + 95.6103, + 93.3103, + 96.6103, + 87.7103, + 85.7103, + 87.0103, + 81.1103, + 79.3103, + 77.1103, + 75.2103, + 73.6103 + ], + "B": [ + 93.7103, + 95.5103, + 106.0103, + 94.5103, + 93.8103, + 94.1103, + 93.4103, + 93.2103, + 92.9103, + 93.3103, + 93.3103, + 93.3103, + 93.2103, + 93.5103, + 91.1103, + 95.6103, + 86.8103, + 84.6103, + 86.0103, + 80.3103, + 78.3103, + 76.4103, + 74.6103, + 73.1103 + ] + } + }, + "5": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Diesel loc/RENFE Dloco/1155kW", + "Values": { + "A": [ + 99.3003, + 103.2003, + 103.0003, + 102.0003, + 97.2003, + 97.2003, + 97.4003, + 99.2003, + 99.0003, + 100.1003, + 100.0003, + 98.0003, + 97.0003, + 94.4003, + 91.8003, + 88.3003, + 85.7003, + 83.5003, + 81.0003, + 78.5003, + 76.4003, + 74.0003, + 71.9003, + 70.1003 + ], + "B": [ + 103.6003, + 108.4003, + 105.9003, + 101.4003, + 97.7003, + 98.0003, + 97.3003, + 97.1003, + 96.8003, + 97.2003, + 97.2003, + 96.2003, + 94.5003, + 92.3003, + 89.6003, + 87.3003, + 84.8003, + 82.4003, + 80.0003, + 77.7003, + 75.4003, + 73.3003, + 71.3003, + 69.6003 + ] + } + }, + "6": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Diesel loc/NS6400 Dloco/1180kW", + "Values": { + "A": [ + 82.9836, + 93.8836, + 88.6836, + 83.6836, + 76.8836, + 76.8836, + 77.0836, + 78.8836, + 78.6836, + 79.7836, + 79.6836, + 78.6836, + 79.2836, + 79.1836, + 79.1836, + 78.1836, + 75.1836, + 72.4836, + 69.5836, + 66.5836, + 64.0836, + 61.1836, + 58.5836, + 56.2836 + ], + "B": [ + 87.2836, + 99.0836, + 91.5836, + 83.0836, + 77.3836, + 77.6836, + 76.9836, + 76.7836, + 76.4836, + 76.8836, + 76.8836, + 76.8836, + 76.7836, + 77.0836, + 76.9836, + 77.1836, + 74.2836, + 71.3836, + 68.5836, + 65.7836, + 63.0836, + 60.4836, + 57.9836, + 55.7836 + ] + } + }, + "7": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Diesel loc/TKOJ JT42CWR/Class66/2200kW", + "Values": { + "A": [ + 92.432, + 88.332, + 87.132, + 92.132, + 90.332, + 90.332, + 90.532, + 92.332, + 92.132, + 93.232, + 93.132, + 90.132, + 88.732, + 86.632, + 84.632, + 81.632, + 79.632, + 77.932, + 76.032, + 74.032, + 72.532, + 70.632, + 69.032, + 67.732 + ], + "B": [ + 96.732, + 93.532, + 90.032, + 91.532, + 90.832, + 91.132, + 90.432, + 90.232, + 89.932, + 90.332, + 90.332, + 88.332, + 86.232, + 84.532, + 82.432, + 80.632, + 78.732, + 76.832, + 75.032, + 73.232, + 71.532, + 69.932, + 68.432, + 67.232 + ] + } + }, + "8": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Diesel multiple unit", + "Values": { + "A": [ + 78.583, + 79.483, + 88.283, + 84.283, + 82.483, + 82.483, + 88.683, + 84.483, + 84.283, + 85.383, + 85.283, + 84.283, + 90.883, + 84.783, + 84.783, + 83.783, + 83.783, + 84.083, + 82.183, + 79.183, + 75.683, + 71.783, + 68.183, + 64.883 + ], + "B": [ + 82.883, + 84.683, + 91.183, + 83.683, + 82.983, + 83.283, + 88.583, + 82.383, + 82.083, + 82.483, + 82.483, + 82.483, + 88.383, + 82.683, + 82.583, + 82.783, + 82.883, + 82.983, + 81.183, + 78.383, + 74.683, + 71.083, + 67.583, + 64.383 + ] + } + }, + "9": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Electric locomotive", + "Values": { + "A": [ + 78.8551, + 84.7551, + 82.5551, + 85.5551, + 85.7551, + 87.7551, + 97.9551, + 91.7551, + 90.5551, + 95.6551, + 89.5551, + 86.5551, + 86.1551, + 90.0551, + 83.0551, + 80.0551, + 78.0551, + 76.3551, + 74.4551, + 72.4551, + 70.9551, + 69.0551, + 67.4551, + 66.1551 + ], + "B": [ + 83.1551, + 89.9551, + 85.4551, + 84.9551, + 86.2551, + 88.5551, + 97.8551, + 89.6551, + 88.3551, + 92.7551, + 86.7551, + 84.7551, + 83.6551, + 87.9551, + 80.8551, + 79.0551, + 77.1551, + 75.2551, + 73.4551, + 71.6551, + 69.9551, + 68.3551, + 66.8551, + 65.6551 + ] + } + }, + "10": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Electric multiple unit ", + "Values": { + "A": [ + 80.5497, + 81.4497, + 80.5497, + 82.2497, + 80.0497, + 79.7497, + 79.6497, + 81.0497, + 80.5497, + 81.3497, + 80.8497, + 79.5497, + 79.8497, + 86.7497, + 81.7497, + 82.7497, + 80.7497, + 78.0497, + 75.1497, + 72.1497, + 69.6497, + 66.7497, + 64.1497, + 61.8497 + ], + "B": [ + 84.8497, + 86.6497, + 83.4497, + 81.6497, + 80.5497, + 80.5497, + 79.5497, + 78.9497, + 78.3497, + 78.4497, + 78.0497, + 77.7497, + 77.3497, + 84.6497, + 79.5497, + 81.7497, + 79.8497, + 76.9497, + 74.1497, + 71.3497, + 68.6497, + 66.0497, + 63.5497, + 61.3497 + ] + } + } + }, + "IdlingSpeed": { + "0": { + "Default": "true", + "Reference": null, + "Description": "Empty traction", + "Values": { + "A": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "B": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "1": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "min", + "Values": { + "A": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "B": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "2": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "max", + "Values": { + "A": [ + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140 + ], + "B": [ + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140 + ] + } + }, + "3": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Diesel locomotive (c. 800kW)", + "Values": { + "A": [ + 87.8613, + 83.7613, + 86.5613, + 88.5613, + 86.7613, + 86.7613, + 86.9613, + 88.7613, + 88.5613, + 89.6613, + 89.5613, + 93.5613, + 89.1613, + 89.0613, + 89.0613, + 88.0613, + 88.0613, + 86.3613, + 83.4613, + 80.4613, + 77.9613, + 75.0613, + 72.4613, + 70.1613 + ], + "B": [ + 92.1613, + 88.9613, + 89.4613, + 87.9613, + 87.2613, + 87.5613, + 86.8613, + 86.6613, + 86.3613, + 86.7613, + 86.7613, + 91.7613, + 86.6613, + 86.9613, + 86.8613, + 87.0613, + 87.1613, + 85.2613, + 82.4613, + 79.6613, + 76.9613, + 74.3613, + 71.8613, + 69.6613 + ] + } + }, + "4": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Diesel locomotive (c. 2200kW)", + "Values": { + "A": [ + 89.4103, + 90.3103, + 103.1103, + 95.1103, + 93.3103, + 93.3103, + 93.5103, + 95.3103, + 95.1103, + 96.2103, + 96.1103, + 95.1103, + 95.7103, + 95.6103, + 93.3103, + 96.6103, + 87.7103, + 85.7103, + 87.0103, + 81.1103, + 79.3103, + 77.1103, + 75.2103, + 73.6103 + ], + "B": [ + 93.7103, + 95.5103, + 106.0103, + 94.5103, + 93.8103, + 94.1103, + 93.4103, + 93.2103, + 92.9103, + 93.3103, + 93.3103, + 93.3103, + 93.2103, + 93.5103, + 91.1103, + 95.6103, + 86.8103, + 84.6103, + 86.0103, + 80.3103, + 78.3103, + 76.4103, + 74.6103, + 73.1103 + ] + } + }, + "5": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Diesel loc/RENFE Dloco/1155kW", + "Values": { + "A": [ + 99.3003, + 103.2003, + 103.0003, + 102.0003, + 97.2003, + 97.2003, + 97.4003, + 99.2003, + 99.0003, + 100.1003, + 100.0003, + 98.0003, + 97.0003, + 94.4003, + 91.8003, + 88.3003, + 85.7003, + 83.5003, + 81.0003, + 78.5003, + 76.4003, + 74.0003, + 71.9003, + 70.1003 + ], + "B": [ + 103.6003, + 108.4003, + 105.9003, + 101.4003, + 97.7003, + 98.0003, + 97.3003, + 97.1003, + 96.8003, + 97.2003, + 97.2003, + 96.2003, + 94.5003, + 92.3003, + 89.6003, + 87.3003, + 84.8003, + 82.4003, + 80.0003, + 77.7003, + 75.4003, + 73.3003, + 71.3003, + 69.6003 + ] + } + }, + "6": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Diesel loc/NS6400 Dloco/1180kW", + "Values": { + "A": [ + 82.9836, + 93.8836, + 88.6836, + 83.6836, + 76.8836, + 76.8836, + 77.0836, + 78.8836, + 78.6836, + 79.7836, + 79.6836, + 78.6836, + 79.2836, + 79.1836, + 79.1836, + 78.1836, + 75.1836, + 72.4836, + 69.5836, + 66.5836, + 64.0836, + 61.1836, + 58.5836, + 56.2836 + ], + "B": [ + 87.2836, + 99.0836, + 91.5836, + 83.0836, + 77.3836, + 77.6836, + 76.9836, + 76.7836, + 76.4836, + 76.8836, + 76.8836, + 76.8836, + 76.7836, + 77.0836, + 76.9836, + 77.1836, + 74.2836, + 71.3836, + 68.5836, + 65.7836, + 63.0836, + 60.4836, + 57.9836, + 55.7836 + ] + } + }, + "7": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Diesel loc/TKOJ JT42CWR/Class66/2200kW", + "Values": { + "A": [ + 92.432, + 88.332, + 87.132, + 92.132, + 90.332, + 90.332, + 90.532, + 92.332, + 92.132, + 93.232, + 93.132, + 90.132, + 88.732, + 86.632, + 84.632, + 81.632, + 79.632, + 77.932, + 76.032, + 74.032, + 72.532, + 70.632, + 69.032, + 67.732 + ], + "B": [ + 96.732, + 93.532, + 90.032, + 91.532, + 90.832, + 91.132, + 90.432, + 90.232, + 89.932, + 90.332, + 90.332, + 88.332, + 86.232, + 84.532, + 82.432, + 80.632, + 78.732, + 76.832, + 75.032, + 73.232, + 71.532, + 69.932, + 68.432, + 67.232 + ] + } + }, + "8": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Diesel multiple unit", + "Values": { + "A": [ + 78.583, + 79.483, + 88.283, + 84.283, + 82.483, + 82.483, + 88.683, + 84.483, + 84.283, + 85.383, + 85.283, + 84.283, + 90.883, + 84.783, + 84.783, + 83.783, + 83.783, + 84.083, + 82.183, + 79.183, + 75.683, + 71.783, + 68.183, + 64.883 + ], + "B": [ + 82.883, + 84.683, + 91.183, + 83.683, + 82.983, + 83.283, + 88.583, + 82.383, + 82.083, + 82.483, + 82.483, + 82.483, + 88.383, + 82.683, + 82.583, + 82.783, + 82.883, + 82.983, + 81.183, + 78.383, + 74.683, + 71.083, + 67.583, + 64.383 + ] + } + }, + "9": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Electric locomotive", + "Values": { + "A": [ + 78.8551, + 84.7551, + 82.5551, + 85.5551, + 85.7551, + 87.7551, + 97.9551, + 91.7551, + 90.5551, + 95.6551, + 89.5551, + 86.5551, + 86.1551, + 90.0551, + 83.0551, + 80.0551, + 78.0551, + 76.3551, + 74.4551, + 72.4551, + 70.9551, + 69.0551, + 67.4551, + 66.1551 + ], + "B": [ + 83.1551, + 89.9551, + 85.4551, + 84.9551, + 86.2551, + 88.5551, + 97.8551, + 89.6551, + 88.3551, + 92.7551, + 86.7551, + 84.7551, + 83.6551, + 87.9551, + 80.8551, + 79.0551, + 77.1551, + 75.2551, + 73.4551, + 71.6551, + 69.9551, + 68.3551, + 66.8551, + 65.6551 + ] + } + }, + "10": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Electric multiple unit ", + "Values": { + "A": [ + 80.5497, + 81.4497, + 80.5497, + 82.2497, + 80.0497, + 79.7497, + 79.6497, + 81.0497, + 80.5497, + 81.3497, + 80.8497, + 79.5497, + 79.8497, + 86.7497, + 81.7497, + 82.7497, + 80.7497, + 78.0497, + 75.1497, + 72.1497, + 69.6497, + 66.7497, + 64.1497, + 61.8497 + ], + "B": [ + 84.8497, + 86.6497, + 83.4497, + 81.6497, + 80.5497, + 80.5497, + 79.5497, + 78.9497, + 78.3497, + 78.4497, + 78.0497, + 77.7497, + 77.3497, + 84.6497, + 79.5497, + 81.7497, + 79.8497, + 76.9497, + 74.1497, + 71.3497, + 68.6497, + 66.0497, + 63.5497, + 61.3497 + ] + } + } + }, + "AerodynamicNoise": { + "0": { + "Default": "true", + "Reference": "", + "Description": "Empty aerodynamic noise", + "V0": 0, + "Alpha": 0, + "Values": { + "A": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "B": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "1": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "min", + "V0": 0, + "Alpha": 0, + "Values": { + "A": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "B": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "2": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "max", + "V0": "400", + "Alpha": "100", + "Values": { + "A": [ + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140 + ], + "B": [ + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140 + ] + } + }, + "3": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Aerodynamic noise given at 300 km/h", + "V0": "300", + "Alpha": "50", + "Values": { + "A": [ + 112.5778, + 113.1665, + 115.6758, + 117.385, + 115.2634, + 114.9727, + 114.882, + 116.3808, + 115.8696, + 116.2758, + 116.1758, + 115.1758, + 115.7758, + 115.6758, + 115.6758, + 114.6758, + 114.6758, + 114.9758, + 114.5449, + 113.0912, + 112.0857, + 110.6294, + 109.5758, + 108.8221 + ], + "B": [ + 36.7103, + 38.5103, + 39.0103, + 37.5103, + 36.8103, + 37.1103, + 36.4103, + 36.2103, + 35.9103, + 36.3103, + 36.3103, + 36.3103, + 36.2103, + 36.5103, + 36.4103, + 105.2103, + 110.3103, + 110.4103, + 105.6103, + 37.2103, + 37.5103, + 37.9103, + 38.4103, + 39.2103 + ] + } + } + } + }, + "Track": { + "TrackTransfer": { + "0": { + "Default": "true", + "Reference": null, + "Description": "Empty track transfer function", + "Sleeper": null, + "Railpad": null, + "Spectre": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "1": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "min", + "Sleeper": null, + "Railpad": null, + "Spectre": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "2": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "max", + "Sleeper": null, + "Railpad": null, + "Spectre": [ + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140 + ] + }, + "3": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Mono-block sleeper on soft rail pad", + "Sleeper": "Concrete mono-block", + "Railpad": "Soft", + "Spectre": [ + 53.3, + 59.3, + 67.2, + 75.9, + 79.2, + 81.8, + 84.2, + 88.6, + 91, + 94.5, + 97, + 99.2, + 104, + 107.1, + 108.3, + 108.5, + 109.7, + 110, + 110, + 110, + 110.3, + 110, + 110.1, + 110.6 + ] + }, + "4": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Mono-block sleeper on medium stiffness rail pad", + "Sleeper": "Concrete mono-block", + "Railpad": "Medium", + "Spectre": [ + 50.9, + 57.8, + 66.5, + 76.8, + 80.9, + 83.3, + 85.8, + 90, + 91.6, + 93.9, + 95.6, + 97.4, + 101.7, + 104.4, + 106, + 106.8, + 108.3, + 108.9, + 109.1, + 109.4, + 109.9, + 109.9, + 110.3, + 111 + ] + }, + "5": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Mono-block on hard rail pad", + "Sleeper": "Concrete mono-block", + "Railpad": "Stiff", + "Spectre": [ + 50.1, + 57.2, + 66.3, + 77.2, + 81.6, + 84, + 86.5, + 90.7, + 92.1, + 94.3, + 95.8, + 97, + 100.3, + 102.5, + 104.2, + 105.4, + 107.1, + 107.9, + 108.2, + 108.7, + 109.4, + 109.7, + 110.4, + 111.4 + ] + }, + "6": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Bi-block sleeper on soft rail pad", + "Sleeper": "Concrete bi-block", + "Railpad": "Soft", + "Spectre": [ + 50.9, + 56.6, + 64.3, + 72.3, + 75.4, + 78.5, + 81.8, + 86.6, + 89.1, + 91.9, + 94.5, + 97.5, + 104, + 107.9, + 108.9, + 108.8, + 109.8, + 110.2, + 110.1, + 110.1, + 110.3, + 109.9, + 110, + 110.4 + ] + }, + "7": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Bi-block sleeper on medium stiffness rail pad", + "Sleeper": "Concrete bi-block", + "Railpad": "Medium", + "Spectre": [ + 50, + 56.1, + 64.1, + 72.5, + 75.8, + 79.1, + 83.6, + 88.7, + 89.6, + 89.7, + 90.6, + 93.8, + 100.6, + 104.7, + 106.3, + 107.1, + 108.8, + 109.3, + 109.4, + 109.7, + 110, + 109.8, + 110, + 110.5 + ] + }, + "8": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Bi-block sleeper on hard rail pad", + "Sleeper": "Concrete bi-block", + "Railpad": "Stiff", + "Spectre": [ + 49.8, + 55.9, + 64, + 72.5, + 75.9, + 79.4, + 84.4, + 89.7, + 90.2, + 90.2, + 90.8, + 93.1, + 97.9, + 101.1, + 103.4, + 105.4, + 107.7, + 108.5, + 108.7, + 109.1, + 109.6, + 109.6, + 109.9, + 110.6 + ] + }, + "9": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Wooden sleepers", + "Sleeper": "Wood", + "Railpad": null, + "Spectre": [ + 44, + 51, + 59.9, + 70.8, + 75.1, + 76.9, + 77.2, + 80.9, + 85.3, + 92.5, + 97, + 98.7, + 102.8, + 105.4, + 106.5, + 106.4, + 107.5, + 108.1, + 108.4, + 108.7, + 109.1, + 109.1, + 109.5, + 110.2 + ] + }, + "10": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Direct fastening on bridges", + "Sleeper": null, + "Railpad": null, + "Spectre": [ + 75.4, + 77.4, + 81.4, + 87.1, + 88.0, + 89.7, + 83.4, + 87.7, + 89.8, + 97.5, + 99.0, + 100.8, + 104.9, + 111.8, + 113.9, + 115.5, + 114.9, + 118.2, + 118.3, + 118.4, + 118.9, + 117.5, + 117.9, + 118.6 + ] + } + }, + "SuperstructureTransfer": { + "0": { + "Default": "true", + "Reference": "", + "Description": "Empty superstructure transfer function", + "Spectre": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "1": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "min", + "Spectre": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "2": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "max", + "Spectre": [ + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140, + 140 + ] + }, + "3": { + "Default": "true", + "Reference": "CNOSSOS", + "Description": "CNOSSOS-EU Default", + "Spectre": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "RailRoughness": { + "0": { + "Default": "true", + "Reference": "", + "Description": "Empty rail roughness", + "RoughnessCode": "", + "Values": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "1": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "min", + "RoughnessCode": "Well maintained and very smooth", + "Values": [ + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15, + -15 + ] + }, + "2": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "max", + "RoughnessCode": "Not maintained and bad condition", + "Values": [ + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22, + 22 + ] + }, + "3": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "EN ISO 3095 2013", + "RoughnessCode": "Well maintained and very smooth", + "Values": [ + 17.1, + 17.1, + 17.1, + 17.1, + 17.1, + 17.1, + 17.1, + 17.1, + 15.0, + 13.0, + 11.0, + 9.0, + 7.0, + 4.9, + 2.9, + 0.9, + -1.1, + -3.2, + -5.0, + -5.6, + -6.2, + -6.8, + -7.4, + -8.0, + -8.6, + -9.2, + -9.8, + -10.4, + -11.0, + -11.6, + -12.2, + -12.8, + -13.4, + -14.0, + -14.0 + ] + }, + "4": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Average network", + "RoughnessCode": "Normally maintained smooth", + "Values": [ + 35.0, + 31.0, + 28.0, + 25.0, + 23.0, + 20.0, + 17.0, + 13.5, + 10.5, + 9.0, + 6.5, + 5.5, + 5.0, + 3.5, + 2.0, + 0.1, + -0.2, + -0.3, + -0.8, + -3.0, + -5.0, + -7.0, + -8.0, + -9.0, + -10.0, + -12.0, + -13.0, + -14.0, + -15.0, + -16.0, + -17.0, + -18.0, + -19.0, + -19.0, + -19.0 + ] + } + }, + "ImpactNoise": { + "0": { + "Default": "true", + "Reference": "", + "Description": "Empty impact noise", + "RoughnessCode": "", + "JoinDensity": null, + "JoinDensityDescription": "", + "Values": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "1": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "min", + "RoughnessCode": "Normally maintained smooth", + "JoinDensity": 0, + "JoinDensityDescription": "none", + "Values": [ + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40, + -40 + ] + }, + "2": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "max", + "RoughnessCode": "Normally maintained smooth", + "JoinDensity": 3, + "JoinDensityDescription": ">2 switches/joints/crossings/100m", + "Values": [ + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30 + ] + }, + "3": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "Single switch/joint/crossing/100m", + "RoughnessCode": "Normally maintained smooth", + "JoinDensity": 1, + "JoinDensityDescription": "single switch/joint/crossing/100m", + "Values": [ + 22.0, + 22.0, + 22.0, + 22.0, + 22.0, + 20.0, + 16.0, + 15.0, + 14.0, + 15.0, + 14.0, + 12.0, + 11.0, + 10.0, + 9.0, + 8.0, + 6.0, + 3.0, + 2.0, + -3.0, + -8.0, + -13.0, + -17.0, + -19.0, + -22.0, + -25.0, + -26.0, + -32.0, + -35.0, + -40.0, + -43.0, + -45.0, + -47.0, + -49.0, + -50.0 + ] + } + }, + "BridgeConstant": { + "0": { + "Default": "true", + "Reference": "", + "Description": "Empty bridge constant", + "Value": 0 + }, + "1": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "min", + "Value": 0 + }, + "2": { + "Default": "true", + "Reference": "IMAGINE", + "Description": "max", + "Value": 9 + }, + "3": { + "Default": "true", + "Reference": "CNOSSOS", + "Description": "Predominantly concrete or masonry bridges with any trackform", + "Values": [ + 85.2, + 87.1, + 91.0, + 94.0, + 94.4, + 96.0, + 92.5, + 96.7, + 97.4, + 99.4, + 100.7, + 102.5, + 107.1, + 109.8, + 112.0, + 107.2, + 106.8, + 107.3, + 99.3, + 91.4, + 86.9, + 79.7, + 75.1, + 70.8 + ] + }, + "4": { + "Default": "true", + "Reference": "CNOSSOS", + "Description": "Predominantly steel bridges with ballasted track ", + "Values": [ + 90.1, + 92.1, + 96.0, + 99.5, + 99.9, + 101.5, + 99.6, + 103.8, + 104.5, + 106.5, + 107.8, + 109.6, + 116.1, + 118.8, + 120.9, + 109.5, + 109.1, + 109.6, + 102.0, + 94.1, + 89.6, + 83.6, + 79.0, + 74.7 + ] + } + } + } +} + diff --git a/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/railway/RailwayCnossosSNCF_2021.json b/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/railway/RailwayCnossosSNCF_2021.json new file mode 100644 index 000000000..99770b161 --- /dev/null +++ b/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/railway/RailwayCnossosSNCF_2021.json @@ -0,0 +1,1817 @@ +{ + "Vehicle": { + "Transfer": { + "1": { + "Description": "Roue-de-diametre-1200-mm", + "Reference": "SNCF Juin 2021", + "Spectre": [ + 66.2, + 70.2, + 78.2, + 90.9, + 89.1, + 91.8, + 93.8, + 96.9, + 97.3, + 100.8, + 106.1, + 112.8, + 119.1, + 121.0, + 121.9, + 123.4, + 126.4, + 128.0, + 128.9, + 130.3, + 131.0, + 126.7, + 124.7, + 122.7 + ] + }, + "2": { + "Description": "Roue-de-diametre-920-mm", + "Reference": "SNCF Juin 2021", + "Spectre": [ + 66.2, + 68.2, + 72.2, + 79.0, + 80.0, + 82.3, + 84.4, + 87.4, + 89.4, + 92.3, + 94.9, + 101.8, + 108.3, + 112.2, + 113.7, + 115.2, + 119.0, + 122.4, + 124.8, + 125.0, + 124.1, + 120.1, + 121.2, + 122.2 + ] + }, + "3": { + "Description": "Roue-de-diametre-840-mm", + "Reference": "SNCF Juin 2021", + "Spectre": [ + 65.9, + 67.6, + 73.5, + 73.3, + 78.0, + 81.8, + 86.4, + 86.1, + 86.7, + 90.8, + 96.7, + 103.1, + 107.4, + 111.6, + 115.2, + 112.4, + 116.0, + 118.1, + 119.7, + 120.1, + 119.4, + 116.4, + 116.8, + 117.5 + ] + }, + "4": { + "Description": "Roue-de-diametre-680-mm", + "Reference": "SNCF Juin 2021", + "Spectre": [ + 64.6, + 66.1, + 72.9, + 73.7, + 77.2, + 78.1, + 85.4, + 85.6, + 86.1, + 90.4, + 96.7, + 102.3, + 105.5, + 108.9, + 113.1, + 107.0, + 107.4, + 104.6, + 106.5, + 106.8, + 104.9, + 102.6, + 103.0, + 103.7 + ] + } + }, + "WheelRoughness": { + "1": { + "Description": "Freins-semelles-fonte", + "Reference": "SNCF Juin 2021", + "Values": [ + 1.7, + 1.7, + 1.8, + 2.2, + 2.8, + 3.4, + 3.8, + 4.1, + 4.4, + 4.6, + 4.8, + 5.3, + 5.3, + 5.8, + 6.6, + 7.9, + 7.8, + 7, + 5.7, + 3.9, + 1.3, + -0.9, + -2.5, + -4.4, + -6.5, + -8.8, + -11.4, + -12.7, + -13.6, + -14.2, + -14.6, + -14.8, + -15, + -15, + -15 + ] + }, + "2": { + "Description": "Freins-semelles-composites", + "Reference": "SNCF Juin 2021", + "Values": [ + 2, + 2, + 2, + 2, + 2.1, + 2.1, + 2.1, + 2.1, + 2.1, + 2.1, + 0.6, + 0, + -0.9, + -1.7, + -2.2, + -3.3, + -4.2, + -5.7, + -7.2, + -8.1, + -9.5, + -10.2, + -10.9, + -11.7, + -12.7, + -13.8, + -15.3, + -17.8, + -17.8, + -17.8, + -17.8, + -17.8, + -17.8, + -17.8, + -17.8 + ] + }, + "3": { + "Description": "Freins-semelles-composites-+-disque", + "Reference": "SNCF Juin 2021", + "Values": [ + -12.5, + -12.5, + -12.5, + -12.5, + -12.5, + -12.5, + -12.5, + -12.5, + -12.5, + -12.5, + -14.5, + -10.9, + -13.3, + -14.8, + -13.5, + -14.3, + -14.7, + -15, + -14.5, + -15, + -14.5, + -14.5, + -16.7, + -17.5, + -17.5, + -17.9, + -18.9, + -20.7, + -20.7, + -20.7, + -20.6, + -20.6, + -20.6, + -20.5, + -20.5 + ] + }, + "4": { + "Description": "Freins-a-disque", + "Reference": "SNCF Juin 2021", + "Values": [ + 7, + 7, + 7, + 7, + 6.5, + 1, + 2, + 2.4, + 1, + 0.2, + 1.2, + -1.2, + -2.1, + -2.7, + -3.5, + -4.3, + -5.4, + -6.2, + -6.6, + -7, + -7.6, + -7.7, + -8, + -8.5, + -8.9, + -9.5, + -10.8, + -12.1, + -13.7, + -15.8, + -18.3, + -21, + -23.5, + -25.6, + -28 + ] + } + }, + "ContactFilter": { + "1": { + "Description": "Charge-a-l-es-sieu-50kN-Diametre-de-roue-360mm", + "Reference": "SNCF Juin 2021", + "Values": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -0.1, + -0.2, + -0.3, + -0.6, + -1, + -1.8, + -3.2, + -5.4, + -8.7, + -12.2, + -16.7, + -17.7, + -17.8, + -20.7, + -22.1, + -22.8, + -24, + -24.5, + -24.7, + -27, + -27.8 + ] + }, + "2": { + "Description": "Charge-a-l-es-sieu-50kN-Diametre-de-roue-680mm", + "Reference": "SNCF Juin 2021", + "Values": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -0.1, + -0.2, + -0.3, + -0.7, + -1.2, + -2, + -4.1, + -6, + -9.2, + -13.8, + -17.2, + -17.7, + -18.6, + -21.5, + -22.3, + -23.1, + -24.4, + -24.5, + -25, + -28, + -28.8, + -29.6 + ] + }, + "3": { + "Description": "Charge-a-l-es-sieu-25kN-Diametre-de-roue-920mm", + "Reference": "SNCF Juin 2021", + "Values": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -0.1, + -0.3, + -0.5, + -1.1, + -1.8, + -3.3, + -5.3, + -7.9, + -12.8, + -16.8, + -17.7, + -18.2, + -20.5, + -22, + -22.8, + -24.2, + -24.5, + -25, + -27.4, + -28.2, + -29 + ] + }, + "4": { + "Description": "Charge-a-l-es-sieu-50kN-Diametre-de-roue-920mm", + "Reference": "SNCF Juin 2021", + "Values": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -0.1, + -0.1, + -0.3, + -0.6, + -1.1, + -1.3, + -3.5, + -5.3, + -8, + -12, + -16.8, + -17.7, + -18, + -21.5, + -21.8, + -22.8, + -24, + -24.5, + -25, + -27.3, + -28.1, + -28.9, + -29.7 + ] + }, + "5": { + "Description": "Charge-a-l-es-sieu-100kN-Diametre-de-roue-920mm", + "Reference": "SNCF Juin 2021", + "Values": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -0.1, + -0.2, + -0.3, + -0.6, + -1, + -1.8, + -3.2, + -5.4, + -8.7, + -12.2, + -16.7, + -17.7, + -17.8, + -20.7, + -22.1, + -22.8, + -24, + -24.5, + -24.7, + -27, + -27.8, + -28.6, + -29.4, + -30.2 + ] + } + }, + "ConstantSpeed": { + "1": { + "Description": "Trains-a-grande-vitesse", + "Reference": "SNCF Juin 2021", + "Values": { + "A": [ + 88.9, + 88.8, + 88.7, + 89.2, + 86.1, + 93.2, + 89.8, + 83.3, + 85.9, + 86.1, + 84.7, + 84, + 82.5, + 83.6, + 80.6, + 80.2, + 78, + 76.4, + 75.5, + 74.4, + 70.8, + 66.7, + 61.5, + 59.5 + ], + "B": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "2": { + "Description": "Automoteur-type-A", + "Reference": "SNCF Juin 2021", + "Values": { + "A": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "B": [ + 95.2, + 94.8, + 92.1, + 90.3, + 88.9, + 90, + 91.4, + 95.6, + 96.1, + 91, + 95, + 92.5, + 91, + 91.8, + 90.8, + 89.7, + 88.4, + 87.4, + 86.3, + 82.5, + 80.3, + 78.4, + 72.5, + 70.7 + ] + } + }, + "3": { + "Description": "Automoteur-type-B", + "Reference": "SNCF Juin 2021", + "Values": { + "A": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "B": [ + 82.1, + 81.7, + 79.0, + 77.2, + 75.8, + 76.9, + 78.3, + 82.5, + 83.0, + 77.9, + 81.9, + 79.4, + 77.9, + 78.7, + 77.7, + 76.6, + 75.3, + 74.3, + 73.2, + 69.4, + 67.2, + 65.3, + 59.4, + 58.8 + ] + } + }, + "4": { + "Description": "Automoteur-type-C", + "Reference": "SNCF Juin 2021", + "Values": { + "B": [ + 88, + 87.5, + 85, + 83.5, + 80.2, + 85.2, + 82.5, + 80.8, + 80.9, + 76.6, + 77.5, + 77, + 75.9, + 75.6, + 75.5, + 75.2, + 73.3, + 70.5, + 69.6, + 67.6, + 65.4, + 63.3, + 56.9, + 55.4 + ], + "A": [ + 69.7, + 69.7, + 69.7, + 77.9, + 74.5, + 79.9, + 74.4, + 69.4, + 69, + 67.9, + 67.8, + 66.5, + 65.4, + 64.9, + 64.5, + 63.4, + 62.3, + 60.8, + 67.5, + 65.5, + 59.7, + 58, + 57.9, + 57.8 + ] + } + }, + "5": { + "Description": "Automoteur-type-D", + "Reference": "SNCF Juin 2021", + "Values": { + "A": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "B": [ + 77.5, + 77, + 75.6, + 80.3, + 79, + 78.1, + 79.1, + 78.6, + 76.9, + 75.9, + 73.8, + 74.4, + 73.8, + 75, + 75.3, + 69.1, + 69, + 68.3, + 66.3, + 63.6, + 60.6, + 57.9, + 55.5, + 55.1 + ] + } + }, + "6": { + "Description": "Automoteur-type-E", + "Reference": "SNCF Juin 2021", + "Values": { + "A": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "B": [ + 78.8, + 79.5, + 85.1, + 89.2, + 84.7, + 83.4, + 83.9, + 86.9, + 85.3, + 80.9, + 79.4, + 80.8, + 82.7, + 79.7, + 77.8, + 77.2, + 77.6, + 74.8, + 73.8, + 72.6, + 66.8, + 63.8, + 59, + 58.6 + ] + } + }, + "7": { + "Description": "Automoteur-type-F", + "Reference": "SNCF Juin 2021", + "Values": { + "A": [ + 93.3, + 94.7, + 100.3, + 104.4, + 99.9, + 98.6, + 99.1, + 102.1, + 100.5, + 96.1, + 94.6, + 96.1, + 97.9, + 95, + 93, + 92.4, + 92.8, + 90, + 89.1, + 87.8, + 82.1, + 79, + 74.2, + 73.7 + ], + "B": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "8": { + "Description": "Automoteur-type-G", + "Reference": "SNCF Juin 2021", + "Values": { + "A": [ + 88.5, + 90.5, + 96.1, + 100.2, + 95.7, + 94.4, + 94.9, + 97.9, + 96.3, + 91.9, + 90.4, + 91.9, + 93.7, + 90.8, + 88.8, + 88.2, + 88.6, + 85.8, + 84.9, + 83.6, + 77.9, + 74.8, + 70, + 68.1 + ], + "B": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "9": { + "Description": "Automoteur-type-H", + "Reference": "SNCF Juin 2021", + "Values": { + "A": [ + 61.4, + 61.8, + 62.6, + 65, + 69.4, + 73.3, + 71.6, + 70.9, + 76.3, + 75.2, + 76, + 75.6, + 83.5, + 76.9, + 72.8, + 73.1, + 73.6, + 68.9, + 66.2, + 64.1, + 62.4, + 54.8, + 43.4, + 39.6 + ], + "B": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "10": { + "Description": "Rames-remorquees", + "Reference": "SNCF Juin 2021", + "Values": { + "A": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "B": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "11": { + "Description": "Voitures-remorquees-type-A", + "Reference": "SNCF Juin 2021", + "Values": { + "A": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "B": [ + 82.1, + 81.4, + 78.7, + 76.9, + 75.5, + 76.6, + 78, + 82.2, + 82.7, + 77.6, + 81.6, + 79.1, + 77.6, + 78.4, + 77.4, + 76.3, + 75, + 74, + 72.9, + 69.1, + 66.9, + 65, + 59.1, + 57.8 + ] + } + }, + "12": { + "Description": "Voitures-remorquees-type-B", + "Reference": "SNCF Juin 2021", + "Values": { + "A": [ + 66.7, + 67.2, + 68, + 70.4, + 74.8, + 78.7, + 77, + 76.3, + 81.7, + 80.6, + 81.4, + 81, + 88.9, + 82.3, + 78.2, + 78.5, + 79, + 74.3, + 71.6, + 69.5, + 67.8, + 60.2, + 48.8, + 46.6 + ], + "B": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "13": { + "Description": "Tram-train", + "Reference": "SNCF Juin 2021", + "Values": { + "A": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "B": [ + 78.2, + 78, + 77.7, + 78.4, + 75.8, + 80.6, + 82.1, + 82.6, + 80, + 77.2, + 76.2, + 74.8, + 75.1, + 73.9, + 71.4, + 70.9, + 69.6, + 67.5, + 66.5, + 60.1, + 58.2, + 54.7, + 50.7, + 48.6 + ] + } + }, + "14": { + "Description": "Locomotive-type-A", + "Reference": "SNCF Juin 2021", + "Values": { + "A": [ + 96.4, + 96.7, + 97.2, + 91.5, + 92.1, + 89.9, + 89.2, + 88.6, + 88.6, + 90.2, + 91.8, + 92.3, + 90, + 90.2, + 88.3, + 84.6, + 86.2, + 78.6, + 74.7, + 71, + 70.2, + 70, + 66.8, + 65.7 + ], + "B": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "15": { + "Description": "Locomotive-type-B", + "Reference": "SNCF Juin 2021", + "Values": { + "A": [ + 90.9, + 90.5, + 89.2, + 87.1, + 87.3, + 84.5, + 88.2, + 92.3, + 96, + 89.6, + 92.8, + 87.9, + 87.1, + 87.7, + 86.4, + 84.6, + 86, + 83.3, + 86.9, + 76.7, + 75, + 71.4, + 66.2, + 64.8 + ], + "B": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + } + }, + "AerodynamicNoise": { + "1": { + "DescriptionA": "LW.0-1", + "DescriptionB": "LW.0-2", + "V0": 300, + "Alpha": 50, + "Reference": "SNCF Juin 2021", + "Values": { + "A": [ + 101.2, + 102.4, + 100.9, + 101.2, + 100.4, + 100.8, + 103.4, + 106.1, + 106.8, + 107.1, + 107.9, + 106.3, + 89.8, + 87.2, + 84.3, + 81.2, + 77.6, + 75, + 68.8, + 29.2, + -14, + -13.9, + -15.7, + -15.8 + ], + "B": [ + 110.2, + 111.3, + 112.6, + 113.7, + 112.7, + 111.1, + 111.1, + 110.2, + 110.8, + 111.1, + 111, + 109.4, + 107.3, + 106.1, + 100.6, + 97.7, + 91.6, + 65.1, + 13.8, + -7.8, + -7.6, + -7, + -13, + -13.7 + ] + } + } + } + }, + "Track": { + "TrackTransfer": { + "1": { + "Description": "Traverse-monobloc-sur-semelle-souple", + "Reference": "SNCF Juin 2021", + "Spectre": [ + 42.1, + 45.3, + 49.4, + 53.9, + 59.3, + 66.1, + 74.5, + 80.6, + 80.7, + 79.6, + 83, + 90.3, + 98.8, + 101.6, + 101.9, + 103.6, + 104.9, + 105.8, + 106.7, + 107.6, + 108.5, + 108.2, + 108.3, + 108.8 + ] + }, + "2": { + "Description": "Traverse-monobloc-sur-semelle-de-rigite-moyenne", + "Reference": "SNCF Juin 2021", + "Spectre": [ + 34.6, + 40.9, + 47.4, + 52.9, + 58.8, + 65.3, + 72.7, + 77.4, + 81.4, + 83.3, + 83.9, + 88.5, + 97.5, + 101.4, + 103, + 103.8, + 105.3, + 105.9, + 106.1, + 106.4, + 106.9, + 106.9, + 107.3, + 108 + ] + }, + "3": { + "Description": "Traverse-monobloc-sur-semelle-ri-ge", + "Reference": "SNCF Juin 2021", + "Spectre": [ + 32.5, + 39.4, + 46.6, + 53.2, + 59.1, + 65.5, + 72.3, + 79.1, + 86.2, + 89.3, + 87.9, + 88.5, + 94.4, + 98.4, + 99.1, + 102.6, + 103.8, + 104.6, + 104.9, + 105.4, + 106.1, + 106.4, + 107.1, + 108.1 + ] + }, + "4": { + "Description": "Traverse-bibloc-sur-semelle-souple", + "Reference": "SNCF Juin 2021", + "Spectre": [ + 29.2, + 37, + 45, + 52.3, + 59.8, + 65.6, + 70.8, + 73.4, + 76.7, + 82, + 85.5, + 90.4, + 99.1, + 102.4, + 103, + 104.7, + 105.3, + 105.3, + 105.3, + 105.3, + 105.3, + 105.3, + 105.3, + 105.3 + ] + }, + "5": { + "Description": "Traverse-bibloc-sur-semelle-de-rigite-moyenne", + "Reference": "SNCF Juin 2021", + "Spectre": [ + 34.4, + 41, + 47.7, + 53.2, + 59.4, + 64.5, + 70, + 75.7, + 80.3, + 82.6, + 84.7, + 89.1, + 98.1, + 102.5, + 104.3, + 105.1, + 106.8, + 107.3, + 107.4, + 107.7, + 108, + 107.8, + 108, + 108.5 + ] + }, + "6": { + "Description": "Traverse-bibloc-sur-semelle-ri-ge", + "Reference": "SNCF Juin 2021", + "Spectre": [ + 14.7, + 26.3, + 38.4, + 49.1, + 60.1, + 64.7, + 68.6, + 73.9, + 80.5, + 87, + 88.5, + 85.2, + 90.1, + 97, + 98.5, + 101.1, + 103, + 103.5, + 103.7, + 104.1, + 104.6, + 104.6, + 104.9, + 105.6 + ] + }, + "7": { + "Description": "Traverse-en-bois", + "Reference": "SNCF Juin 2021", + "Spectre": [ + 44, + 51, + 59.9, + 65.4, + 70.6, + 74.7, + 79.3, + 83.3, + 86.7, + 89.6, + 92.4, + 98.7, + 106.1, + 109.5, + 111.9, + 113.2, + 113, + 112.9, + 112.8, + 112.7, + 112.6, + 112.6, + 112.6, + 112.6 + ] + }, + "8": { + "Description": "Fixation-directe-sur-les-ponts-métalliques-(pose-ans-ballast)", + "Reference": "SNCF Fevrier 2022", + "Spectre": [ + 91.4, + 92.7, + 95.8, + 101.2, + 100.5, + 101.2, + 101.4, + 102.5, + 102.6, + 103.4, + 103.4, + 107.3, + 111.0, + 111.4, + 109.3, + 107.4, + 107.4, + 107.1, + 106.4, + 104.1, + 100.7, + 94.4, + 93.2, + 91.7 + ] + } + }, + "RailRoughness": { + "1": { + "Description": "Lignes-Classiques", + "Reference": "SNCF Juin 2021", + "Values": [ + 17.1, + 17.1, + 17.1, + 17.1, + 17.1, + 17.1, + 17.1, + 17.1, + 15, + 13, + 11, + 9, + 5.9, + 4.2, + 2, + -0.4, + -2.6, + -4.8, + -7.1, + -8.4, + -9.5, + -10.6, + -12, + -12.9, + -14, + -15.2, + -16.3, + -17.4, + -20.5, + -22.8, + -24.5, + -25.9, + -27.2, + -27.9, + -28.5 + ] + }, + "2": { + "Description": "LGV", + "Reference": "SNCF Juin 2021", + "Values": [ + 11.3, + 10.2, + 9.1, + 7.9, + 6.6, + 5.3, + 4, + 2.8, + 1.5, + 0.2, + -1, + -2.3, + -3.9, + -4.9, + -6.1, + -7.1, + -7.6, + -8.1, + -8.6, + -9.1, + -9.6, + -10, + -10.7, + -11.1, + -11.6, + -12.6, + -13.7, + -15.4, + -17.8, + -20, + -22.1, + -24.1, + -26.4, + -28.3, + -30.3 + ] + } + }, + "ImpactNoise": { + "1": { + "Description": "Aiguillage/joint/croisement/100m", + "Reference": "SNCF Juin 2021", + "Values": [ + 18.0, + 18.0, + 18.0, + 18.0, + 18.0, + 16.0, + 12.0, + 11.0, + 10.0, + 11.0, + 10.0, + 8.0, + 7.0, + 6.0, + 5.0, + 4.0, + 2.0, + -1.0, + -2.0, + -7.0, + -12.0, + -17.0, + -21.0, + -23.0, + -26.0, + -29.0, + -30.0, + -36.0, + -39.0, + -44.0, + -47.0, + -49.0, + -51.0, + -53.0, + -54.0 + ] + } + }, + "BrgeConstant": { + "1": { + "Description": "Tout-type-de-pont-hors-ponts-metalliques-avec-voies-non-ballastees", + "Reference": "SNCF Juin 2021", + "Values": 0 + }, + "2": { + "Description": "Ponts-metalliques-avec-voies-non-ballastees", + "Reference": "SNCF Juin 2021", + "Values": 5 + } + } + } +} \ No newline at end of file diff --git a/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/railway/RailwayTrainsets.json b/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/railway/RailwayTrainsets.json new file mode 100644 index 000000000..22c17e112 --- /dev/null +++ b/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/railway/RailwayTrainsets.json @@ -0,0 +1,257 @@ +{ + "AM96-3U3": { + "SNCF6": 1, + "SNCF73": 9 + }, + "B81500-4U1": { + "SNCF29": 1 + }, + "B81500-4U2": { + "SNCF29": 2 + }, + "B81500-4U3": { + "SNCF29": 3 + }, + "B82500-4U1": { + "SNCF29": 1 + }, + "B82500-4U2": { + "SNCF29": 2 + }, + "B82500-4U3": { + "SNCF29": 3 + }, + "B83500-6U1": { + "SNCF31": 1 + }, + "B83500-6U2": { + "SNCF31": 2 + }, + "B84500-4U3": { + "SNCF30": 3 + }, + "B84500-6U1": { + "SNCF31": 1 + }, + "B84500-6U2": { + "SNCF31": 2 + }, + "BB27000": { + "SNCF13": 1 + }, + "CORAIL": { + "SNCF6": 1, + "SNCF73": 9 + }, + "FLIRT-4U1": { + "SNCF47": 1 + }, + "FLIRT-4U2": { + "SNCF47": 2 + }, + "FRET": { + "SNCF13": 1, + "SNCF79": 7, + "SNCF78": 11 + }, + "ICE3-10U1": { + "SNCF2": 1 + }, + "TGV-A-12U1": { + "SNCF3": 1 + }, + "TGV-A-12U2": { + "SNCF3": 2 + }, + "TGV-D-10U1": { + "SNCF2": 1 + }, + "TGV-D-10U2": { + "SNCF2": 2 + }, + "TGVSE-10U1": { + "SNCF1": 1 + }, + "TGVSE-10U2": { + "SNCF1": 2 + }, + "TMST-20U1": { + "SNCF4": 1 + }, + "U25500-5U1": { + "SNCF67": 1 + }, + "U52500-4U1": { + "SNCF68": 1 + }, + "U52500-4U2": { + "SNCF68": 2 + }, + "U52500-4U3": { + "SNCF68": 3 + }, + "U53500-4U1": { + "SNCF68": 1 + }, + "U53500-4U2": { + "SNCF68": 2 + }, + "V2N": { + "SNCF8": 1, + "SNCF69": 4 + }, + "VB2N": { + "SNCF22": 1, + "SNCF70": 7 + }, + "X72500-2U1": { + "SNCF33": 1 + }, + "X72500-2U2": { + "SNCF33": 2 + }, + "X72500-2U3": { + "SNCF33": 3 + }, + "X73500-1U1": { + "SNCF35": 1 + }, + "X73500-1U2": { + "SNCF35": 2 + }, + "X73500-1U3": { + "SNCF35": 3 + }, + "X76500-4U1": { + "SNCF37": 1 + }, + "X76500-4U2": { + "SNCF37": 2 + }, + "X76500-4U3": { + "SNCF37": 3 + }, + "Z11500-2U1": { + "SNCF64": 1 + }, + "Z11500-2U2": { + "SNCF64": 2 + }, + "Z20500-5U1": { + "SNCF39": 1 + }, + "Z20500-5U2": { + "SNCF39": 2 + }, + "Z21500-3U1": { + "SNCF40": 1 + }, + "Z21500-3U2": { + "SNCF40": 2 + }, + "Z21500-3U3": { + "SNCF40": 3 + }, + "Z22500-5U1": { + "SNCF41": 1 + }, + "Z22500-5U2": { + "SNCF41": 2 + }, + "Z23500-2U1": { + "SNCF42": 1 + }, + "Z23500-2U2": { + "SNCF42": 2 + }, + "Z24500-3U1": { + "SNCF43": 1 + }, + "Z24500-3U2": { + "SNCF43": 2 + }, + "Z24500-3U3": { + "SNCF43": 3 + }, + "Z26500-4U1": { + "SNCF44": 1 + }, + "Z26500-4U2": { + "SNCF44": 2 + }, + "Z27500-4U1": { + "SNCF47": 1 + }, + "Z27500-4U2": { + "SNCF47": 2 + }, + "Z27500-4U3": { + "SNCF47": 3 + }, + "Z50000-7U1": { + "SNCF48": 1 + }, + "Z50000-7U2": { + "SNCF48": 2 + }, + "Z51500-4U2": { + "SNCF50": 2 + }, + "Z51500-6U1": { + "SNCF51": 1 + }, + "Z54900-4U1": { + "SNCF50": 1 + }, + "Z54900-4U2": { + "SNCF50": 2 + }, + "Z55500-6U1": { + "SNCF53": 1 + }, + "Z55500-6U2": { + "SNCF53": 2 + }, + "Z55500-6U3": { + "SNCF53": 3 + }, + "Z5600-5U1": { + "SNCF61": 1 + }, + "Z5600-5U2": { + "SNCF61": 2 + }, + "Z6400-4U1": { + "SNCF63": 1 + }, + "Z6400-4U2": { + "SNCF63": 2 + }, + "Z7300-2U1": { + "SNCF64": 1 + }, + "Z7300-2U2": { + "SNCF64": 2 + }, + "Z8100-4U1": { + "SNCF65": 1 + }, + "Z8100-4U2": { + "SNCF65": 2 + }, + "Z8800-4U1": { + "SNCF66": 1 + }, + "Z8800-4U2": { + "SNCF66": 2 + }, + "Z9500-2U1": { + "SNCF64": 1 + }, + "Z9500-2U2": { + "SNCF64": 2 + }, + "Z9500-2U3": { + "SNCF64": 3 + } +} \ No newline at end of file diff --git a/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/railway/RailwayVehiclesCnossos.json b/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/railway/RailwayVehiclesCnossos.json new file mode 100644 index 000000000..728885fd3 --- /dev/null +++ b/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/railway/RailwayVehiclesCnossos.json @@ -0,0 +1,1621 @@ +{ + "EU1": { + "Description": "TestTrain EU", + "Reference": "Test 11/2022", + "Vmax": 300, + "Length": 200.19, + "TrailerBogieBraking": "Disques-garniture-frittee", + "MotorBogieBraking": "Semelle-composite", + "MotorWheelDiameter": 920, + "TrailerWheelDiameter": 920, + "ReflectingBarrierEffect": 1, + "NbCoach": 10, + "FirstSourcePosition": 10.0095, + "SourceSpacing": 20.019, + "NbAxlePerVeh": 2.6, + "RefAerodynamic": 1, + "RefRoughness": 4, + "RefContact": 5, + "RefTransfer": 2, + "RefTraction": 1 + }, + "SNCF1": { + "Description": "TGV-00-100-TGV-SE", + "Reference": "SNCF 25/02/2022", + "Vmax": 300, + "Length": 200.19, + "TrailerBogieBraking": "Disques-garniture-frittee", + "MotorBogieBraking": "Semelle-composite", + "MotorWheelDiameter": 920, + "TrailerWheelDiameter": 920, + "ReflectingBarrierEffect": 1, + "NbCoach": 10, + "FirstSourcePosition": 10.0095, + "SourceSpacing": 20.019, + "NbAxlePerVeh": 2.6, + "RefAerodynamic": 1, + "RefRoughness": 4, + "RefContact": 5, + "RefTransfer": 2, + "RefTraction": 1 + }, + "SNCF2": { + "Description": "TGV200-600-700-TGV-Duplex-DASYE-TGV800-4700-TGV-2N2-TGV4300-TGV-Thalys-PBKATGV500-4500-TGV-R-TGV-Thalys-PBA-TGV4400-TGV-POS", + "Reference": "SNCF 25/02/2022", + "Vmax": 320, + "Length": 200.19, + "TrailerBogieBraking": "Disques", + "MotorBogieBraking": "Semelle-composite", + "MotorWheelDiameter": 920, + "TrailerWheelDiameter": 910, + "ReflectingBarrierEffect": 1, + "NbCoach": 10, + "FirstSourcePosition": 10.0095, + "SourceSpacing": 20.019, + "NbAxlePerVeh": 2.6, + "RefAerodynamic": 1, + "RefRoughness": 4, + "RefContact": 5, + "RefTransfer": 2, + "RefTraction": 1 + }, + "SNCF3": { + "Description": "TGV300-400-TGV-A", + "Vmax": 300, + "Length": 237.59, + "TrailerBogieBraking": "Disques", + "MotorBogieBraking": "Semelle-composite", + "MotorWheelDiameter": 920, + "TrailerWheelDiameter": 920, + "ReflectingBarrierEffect": 1, + "NbCoach": 12, + "FirstSourcePosition": 9.8996, + "SourceSpacing": 19.7992, + "NbAxlePerVeh": 2.5, + "RefAerodynamic": 1, + "RefRoughness": 4, + "RefContact": 5, + "RefTransfer": 2, + "RefTraction": 1 + }, + "SNCF4": { + "Description": "TGV3200-TGV-TMST-Eurostar", + "Reference": "SNCF 25/02/2022", + "Vmax": 300, + "Length": 393.72, + "TrailerBogieBraking": "Disques", + "MotorBogieBraking": "Semelle-composite", + "MotorWheelDiameter": 920, + "TrailerWheelDiameter": 920, + "ReflectingBarrierEffect": 1, + "NbCoach": 20, + "FirstSourcePosition": 9.843, + "SourceSpacing": 19.686, + "NbAxlePerVeh": 2.4, + "RefAerodynamic": 1, + "RefRoughness": 4, + "RefContact": 5, + "RefTransfer": 2, + "RefTraction": 1 + }, + "SNCF5": { + "Description": "A1A-A1A-68000", + "Reference": "SNCF 25/02/2022", + "Vmax": 130, + "Length": 18.01, + "TrailerBogieBraking": "Semelle-fonte", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 950, + "TrailerWheelDiameter": null, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 9.005, + "SourceSpacing": 0, + "NbAxlePerVeh": 6, + "RefAerodynamic": 0, + "RefRoughness": 1, + "RefContact": 5, + "RefTransfer": 2, + "RefTraction": 14 + }, + "SNCF6": { + "Description": "BB15000", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 17.48, + "TrailerBogieBraking": "Semelle-frittee", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 1250, + "TrailerWheelDiameter": null, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 8.74, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 5, + "RefTransfer": 1, + "RefTraction": 15 + }, + "SNCF7": { + "Description": "BB16500-BB16600-BB16700", + "Reference": "SNCF 25/02/2022", + "Vmax": 140, + "Length": 14.4, + "TrailerBogieBraking": "Semelle-fonte", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 1110, + "TrailerWheelDiameter": null, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 7.2, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 5, + "RefTransfer": 1, + "RefTraction": 14 + }, + "SNCF8": { + "Description": "BB17000-BB17100", + "Reference": "SNCF 25/02/2022", + "Vmax": 140, + "Length": 14.94, + "TrailerBogieBraking": "Semelle-composite", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 1110, + "TrailerWheelDiameter": null, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 7.47, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 5, + "RefTransfer": 1, + "RefTraction": 14 + }, + "SNCF9": { + "Description": "BB22200-BB22300-BB22400", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 17.48, + "TrailerBogieBraking": "Semelle-frittee", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 1250, + "TrailerWheelDiameter": null, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 8.74, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 5, + "RefTransfer": 1, + "RefTraction": 15 + }, + "SNCF10": { + "Description": "BB25200", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 16.7, + "TrailerBogieBraking": "Semelle-fonte", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 1250, + "TrailerWheelDiameter": null, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 8.35, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 5, + "RefTransfer": 1, + "RefTraction": 14 + }, + "SNCF11": { + "Description": "BB25500-BB25600", + "Reference": "SNCF 25/02/2022", + "Vmax": 140, + "Length": 14.7, + "TrailerBogieBraking": "Semelle-fonte", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 1110, + "TrailerWheelDiameter": null, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 7.35, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 5, + "RefTransfer": 1, + "RefTraction": 14 + }, + "SNCF12": { + "Description": "BB26000-BB26100-BB26200", + "Reference": "SNCF 25/02/2022", + "Vmax": 200, + "Length": 17.71, + "TrailerBogieBraking": "Semelle-frittee", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 1250, + "TrailerWheelDiameter": null, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 8.855, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 5, + "RefTransfer": 1, + "RefTraction": 15 + }, + "SNCF13": { + "Description": "BB27000-BB27100", + "Reference": "SNCF 25/02/2022", + "Vmax": 140, + "Length": 19.72, + "TrailerBogieBraking": "Semelle-composite", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 1150, + "TrailerWheelDiameter": null, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 9.86, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 5, + "RefTransfer": 1, + "RefTraction": 15 + }, + "SNCF14": { + "Description": "BB36000-BB36300", + "Reference": "SNCF 25/02/2022", + "Vmax": 220, + "Length": 19.11, + "TrailerBogieBraking": "Disque-garniture-composite-+-semelle-fonte", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 1150, + "TrailerWheelDiameter": null, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 9.555, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 3, + "RefContact": 5, + "RefTransfer": 1, + "RefTraction": 15 + }, + "SNCF15": { + "Description": "BB37000", + "Reference": "SNCF 25/02/2022", + "Vmax": 140, + "Length": 19.72, + "TrailerBogieBraking": "Semelle-composite", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 1150, + "TrailerWheelDiameter": null, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 9.86, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 5, + "RefTransfer": 1, + "RefTraction": 15 + }, + "SNCF16": { + "Description": "BB61000-Vossloh-G-1206-BB", + "Reference": "SNCF 25/02/2022", + "Vmax": 100, + "Length": 14.7, + "TrailerBogieBraking": "Disque+semelles", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 1000, + "TrailerWheelDiameter": null, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 7.35, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 3, + "RefContact": 5, + "RefTransfer": 1, + "RefTraction": 14 + }, + "SNCF17": { + "Description": "BB63500-BB64000-BB64700", + "Reference": "SNCF 25/02/2022", + "Vmax": 90, + "Length": 14.68, + "TrailerBogieBraking": "Semelle-fonte", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 1050, + "TrailerWheelDiameter": null, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 7.34, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 1, + "RefContact": 5, + "RefTransfer": 2, + "RefTraction": 14 + }, + "SNCF18": { + "Description": "BB66000-BB66100-BB66200-BB66300", + "Reference": "SNCF 25/02/2022", + "Vmax": 120, + "Length": 14.89, + "TrailerBogieBraking": "Semelle-fonte", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 1100, + "TrailerWheelDiameter": null, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 7.445, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 5, + "RefTransfer": 1, + "RefTraction": 14 + }, + "SNCF19": { + "Description": "BB66400-BB66500", + "Reference": "SNCF 25/02/2022", + "Vmax": 120, + "Length": 14.97, + "TrailerBogieBraking": "Semelle-composite", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 1100, + "TrailerWheelDiameter": null, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 7.486, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 5, + "RefTransfer": 1, + "RefTraction": 14 + }, + "SNCF20": { + "Description": "BB67000-BB67100-BB67300", + "Reference": "SNCF 25/02/2022", + "Vmax": 140, + "Length": 17.09, + "TrailerBogieBraking": "Semelle-fonte", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 1150, + "TrailerWheelDiameter": null, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 8.545, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 5, + "RefTransfer": 1, + "RefTraction": 14 + }, + "SNCF21": { + "Description": "BB67200", + "Reference": "SNCF 25/02/2022", + "Vmax": 90, + "Length": 17.09, + "TrailerBogieBraking": "Semelle-fonte", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 1150, + "TrailerWheelDiameter": null, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 8.545, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 5, + "RefTransfer": 1, + "RefTraction": 14 + }, + "SNCF22": { + "Description": "BB67400-BB67500-BB67600", + "Reference": "SNCF 25/02/2022", + "Vmax": 140, + "Length": 17.09, + "TrailerBogieBraking": "Semelle-frittee", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 1250, + "TrailerWheelDiameter": null, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 8.545, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 5, + "RefTransfer": 1, + "RefTraction": 14 + }, + "SNCF23": { + "Description": "BB7200-BB7300-BB7400", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 17.48, + "TrailerBogieBraking": "Semelle-frittee", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 1250, + "TrailerWheelDiameter": null, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 8.74, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 5, + "RefTransfer": 1, + "RefTraction": 15 + }, + "SNCF24": { + "Description": "BB75000-BB75100-BB75300-BB75400", + "Reference": "SNCF 25/02/2022", + "Vmax": 120, + "Length": 20.28, + "TrailerBogieBraking": "Semelle-composite", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 1150, + "TrailerWheelDiameter": null, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 10.14, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 5, + "RefTransfer": 1, + "RefTraction": 15 + }, + "SNCF25": { + "Description": "BB8500-BB8600", + "Reference": "SNCF 25/02/2022", + "Vmax": 140, + "Length": 14.9, + "TrailerBogieBraking": "Semelle-fonte", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 1110, + "TrailerWheelDiameter": null, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 7.45, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 5, + "RefTransfer": 1, + "RefTraction": 14 + }, + "SNCF26": { + "Description": "CC72000-CC72100", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 20.19, + "TrailerBogieBraking": "Semelle-composite", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 1140, + "TrailerWheelDiameter": null, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 10.095, + "SourceSpacing": 0, + "NbAxlePerVeh": 6, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 5, + "RefTransfer": 1, + "RefTraction": 14 + }, + "SNCF27": { + "Description": "TBB64800", + "Reference": "SNCF 25/02/2022", + "Vmax": 80, + "Length": 11.39, + "TrailerBogieBraking": "Semelle-fonte", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 1050, + "TrailerWheelDiameter": null, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 5.695, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 5, + "RefTransfer": 1, + "RefTraction": 14 + }, + "SNCF28": { + "Description": "B81500-tricaisse-AGC-bimode", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 57.4, + "TrailerBogieBraking": "Disque-garniture-frittee", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 840, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 3, + "FirstSourcePosition": 9.5667, + "SourceSpacing": 19.1333, + "NbAxlePerVeh": 2.7, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 4, + "RefTransfer": 3, + "RefTraction": 6 + }, + "SNCF29": { + "Description": "B81500-B82500-quadricaisse-AGC-bimode", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 72.8, + "TrailerBogieBraking": "Disque-garniture-frittee", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 840, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 4, + "FirstSourcePosition": 9.1, + "SourceSpacing": 18.2, + "NbAxlePerVeh": 2.5, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 4, + "RefTransfer": 3, + "RefTraction": 6 + }, + "SNCF30": { + "Description": "B83500-B84500-B85900-4-caisses-Regiolis", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 71.82, + "TrailerBogieBraking": "Disque-garniture-frittee", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 840, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 4, + "FirstSourcePosition": 8.9775, + "SourceSpacing": 17.955, + "NbAxlePerVeh": 2.5, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 4, + "RefTransfer": 3, + "RefTraction": 6 + }, + "SNCF31": { + "Description": "B83500-B84500-B85000-6-caisses-Regiolis", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 110, + "TrailerBogieBraking": "Disque-garniture-frittee", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 840, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 6, + "FirstSourcePosition": 9.1667, + "SourceSpacing": 18.3333, + "NbAxlePerVeh": 2.7, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 4, + "RefTransfer": 3, + "RefTraction": 6 + }, + "SNCF32": { + "Description": "X4500-modernise", + "Reference": "SNCF 25/02/2022", + "Vmax": 120, + "Length": 43.48, + "TrailerBogieBraking": "Semelle-fonte", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 860, + "TrailerWheelDiameter": 860, + "ReflectingBarrierEffect": 1, + "NbCoach": 2, + "FirstSourcePosition": 10.87, + "SourceSpacing": 21.74, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 1, + "RefContact": 4, + "RefTransfer": 3, + "RefTraction": 9 + }, + "SNCF33": { + "Description": "X72500-X72600-X72700-bicaisse-X-TER", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 52.9, + "TrailerBogieBraking": "Disque-+-semelle-composite", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 920, + "TrailerWheelDiameter": 920, + "ReflectingBarrierEffect": 1, + "NbCoach": 2, + "FirstSourcePosition": 13.225, + "SourceSpacing": 26.45, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 3, + "RefContact": 4, + "RefTransfer": 2, + "RefTraction": 7 + }, + "SNCF34": { + "Description": "X72500-X72600-X72700-tricaisse-X-TER", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 78.5, + "TrailerBogieBraking": "Disque-+-semelle-composite", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 920, + "TrailerWheelDiameter": 920, + "ReflectingBarrierEffect": 1, + "NbCoach": 3, + "FirstSourcePosition": 13.0833, + "SourceSpacing": 26.1667, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 3, + "RefContact": 4, + "RefTransfer": 2, + "RefTraction": 7 + }, + "SNCF35": { + "Description": "X73500-X73600-X73700-X73800-73900-A-TER", + "Reference": "SNCF 25/02/2022", + "Vmax": 140, + "Length": 28.9, + "TrailerBogieBraking": "Disque", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 840, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 14.45, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 5, + "RefTransfer": 3, + "RefTraction": 8 + }, + "SNCF36": { + "Description": "X76500-tricaisse-AGC", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 57.4, + "TrailerBogieBraking": "Disque-garniture-frittee", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 840, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 3, + "FirstSourcePosition": 9.5667, + "SourceSpacing": 19.1333, + "NbAxlePerVeh": 2.7, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 4, + "RefTransfer": 2, + "RefTraction": 6 + }, + "SNCF37": { + "Description": "X76500-quadricaisse-AGC", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 72.8, + "TrailerBogieBraking": "Disque-garniture-frittee", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 840, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 4, + "FirstSourcePosition": 9.1, + "SourceSpacing": 18.2, + "NbAxlePerVeh": 2.5, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 4, + "RefTransfer": 2, + "RefTraction": 6 + }, + "SNCF38": { + "Description": "Z20500-Z20600-Z20700-Z20800-Z20900-Z21000-quadricaisse-Z2N", + "Reference": "SNCF 25/02/2022", + "Vmax": 140, + "Length": 103.508, + "TrailerBogieBraking": "Disque-+-semelle-composite", + "MotorBogieBraking": "Semelle-frittee", + "MotorWheelDiameter": 1020, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 4, + "FirstSourcePosition": 12.9385, + "SourceSpacing": 25.877, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 4, + "RefTransfer": 2, + "RefTraction": 3 + }, + "SNCF39": { + "Description": "Z20500-Z20600-Z20700-Z20800-pentacaisse-Z2N", + "Reference": "SNCF 25/02/2022", + "Vmax": 140, + "Length": 129.4, + "TrailerBogieBraking": "Disque-+-semelle-composite", + "MotorBogieBraking": "Semelle-frittee", + "MotorWheelDiameter": 1020, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 5, + "FirstSourcePosition": 12.94, + "SourceSpacing": 25.88, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 4, + "RefTransfer": 2, + "RefTraction": 3 + }, + "SNCF40": { + "Description": "Z21500-Z21600-Z21700-ZTER", + "Reference": "SNCF 25/02/2022", + "Vmax": 200, + "Length": 79.2, + "TrailerBogieBraking": "Disque-garniture-composite", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 920, + "TrailerWheelDiameter": 920, + "ReflectingBarrierEffect": 1, + "NbCoach": 3, + "FirstSourcePosition": 13.2, + "SourceSpacing": 26.4, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 4, + "RefTransfer": 2, + "RefTraction": 4 + }, + "SNCF41": { + "Description": "Z22500-Z22600-pentacaisse-MI2N", + "Reference": "SNCF 25/02/2022", + "Vmax": 140, + "Length": 112, + "TrailerBogieBraking": "Disque-garniture-composite", + "MotorBogieBraking": "Semelle-composite", + "MotorWheelDiameter": 920, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 5, + "FirstSourcePosition": 11.2, + "SourceSpacing": 22.4, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 4, + "RefTransfer": 3, + "RefTraction": 4 + }, + "SNCF42": { + "Description": "Z23500-TER-2N-PG", + "Reference": "SNCF 25/02/2022", + "Vmax": 140, + "Length": 52.5, + "TrailerBogieBraking": "Disque-garniture-composite-+-Semelle-composite", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 1020, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 2, + "FirstSourcePosition": 13.125, + "SourceSpacing": 26.25, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 5, + "RefTransfer": 3, + "RefTraction": 4 + }, + "SNCF43": { + "Description": "Z24500-Z24600-Z24700-Z24800-tricaisse-TER-2N-NG", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 81.1, + "TrailerBogieBraking": "Disque-garniture-composite-+-Semelle-composite", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 920, + "TrailerWheelDiameter": 920, + "ReflectingBarrierEffect": 1, + "NbCoach": 3, + "FirstSourcePosition": 13.5167, + "SourceSpacing": 27.0333, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 5, + "RefTransfer": 2, + "RefTraction": 4 + }, + "SNCF44": { + "Description": "Z26500-Z26600-quadricaisse-TER-2N-NG", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 107.5, + "TrailerBogieBraking": "Disque-garniture-composite-+-Semelle-composite", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 920, + "TrailerWheelDiameter": 920, + "ReflectingBarrierEffect": 1, + "NbCoach": 4, + "FirstSourcePosition": 13.4375, + "SourceSpacing": 26.875, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 5, + "RefTransfer": 2, + "RefTraction": 4 + }, + "SNCF45": { + "Description": "Z26500-Z26600-pentacaisse-TER-2N-NG", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 133.9, + "TrailerBogieBraking": "Disque-garniture-composite-+-Semelle-composite", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 920, + "TrailerWheelDiameter": 920, + "ReflectingBarrierEffect": 1, + "NbCoach": 5, + "FirstSourcePosition": 13.39, + "SourceSpacing": 26.78, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 5, + "RefTransfer": 2, + "RefTraction": 4 + }, + "SNCF46": { + "Description": "Z27500-Z27600-Z27700-Z27800-Z27900-tricaisse-ZGC", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 57.4, + "TrailerBogieBraking": "Disque-garniture-frittee", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 840, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 3, + "FirstSourcePosition": 9.5667, + "SourceSpacing": 19.1333, + "NbAxlePerVeh": 2.7, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 5, + "RefTransfer": 3, + "RefTraction": 5 + }, + "SNCF47": { + "Description": "Z27500-Z27600-Z27700-Z27800-Z27900-quadricaisse-ZGC", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 72.8, + "TrailerBogieBraking": "Disque-garniture-frittee", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 840, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 4, + "FirstSourcePosition": 9.1, + "SourceSpacing": 18.2, + "NbAxlePerVeh": 2.5, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 5, + "RefTransfer": 3, + "RefTraction": 5 + }, + "SNCF48": { + "Description": "Z50000-7-caisses-NAT", + "Reference": "SNCF 25/02/2022", + "Vmax": 140, + "Length": 94.31, + "TrailerBogieBraking": "Disque-garniture-composite", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 840, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 7, + "FirstSourcePosition": 6.7364, + "SourceSpacing": 13.4729, + "NbAxlePerVeh": 2.3, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 4, + "RefTransfer": 3, + "RefTraction": 4 + }, + "SNCF49": { + "Description": "Z50000-8-caisses-NAT", + "Reference": "SNCF 25/02/2022", + "Vmax": 140, + "Length": 112.5, + "TrailerBogieBraking": "Disque-garniture-composite", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 840, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 8, + "FirstSourcePosition": 7.0313, + "SourceSpacing": 14.0625, + "NbAxlePerVeh": 2.25, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 4, + "RefTransfer": 3, + "RefTraction": 4 + }, + "SNCF50": { + "Description": "Z51500-Z54500-Z54900-4-caisses-REGIOLIS", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 71.82, + "TrailerBogieBraking": "Disque-garniture-frittee", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 840, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 4, + "FirstSourcePosition": 8.9775, + "SourceSpacing": 17.955, + "NbAxlePerVeh": 2.5, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 5, + "RefTransfer": 3, + "RefTraction": 5 + }, + "SNCF51": { + "Description": "Z51500-6-caisses-REGIOLIS", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 110, + "TrailerBogieBraking": "Disque-garniture-frittee", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 840, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 6, + "FirstSourcePosition": 9.1667, + "SourceSpacing": 18.3333, + "NbAxlePerVeh": 2.7, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 5, + "RefTransfer": 3, + "RefTraction": 5 + }, + "SNCF52": { + "Description": "Z31500-REGIOLIS-LEX", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 71.82, + "TrailerBogieBraking": "Disque-garniture-frittee", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 840, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 4, + "FirstSourcePosition": 8.9775, + "SourceSpacing": 17.955, + "NbAxlePerVeh": 2.5, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 5, + "RefTransfer": 3, + "RefTraction": 5 + }, + "SNCF53": { + "Description": "Z55500-Z55600-Z55700-courte�Z56300-REGIO-2N", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 80.945, + "TrailerBogieBraking": "Disque", + "MotorBogieBraking": "2-essieux-fontes-+-semelle-composite", + "MotorWheelDiameter": 840, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 6, + "FirstSourcePosition": 6.7454, + "SourceSpacing": 13.4908, + "NbAxlePerVeh": 2.3, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 4, + "RefTransfer": 3, + "RefTraction": 4 + }, + "SNCF54": { + "Description": "Z55500-Z55600-Z55700-courte2-REGIO-2N", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 82.695, + "TrailerBogieBraking": "Disque", + "MotorBogieBraking": "2-essieux-fontes-+-semelle-composite", + "MotorWheelDiameter": 840, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 6, + "FirstSourcePosition": 6.8913, + "SourceSpacing": 13.7825, + "NbAxlePerVeh": 2.3, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 4, + "RefTransfer": 3, + "RefTraction": 4 + }, + "SNCF55": { + "Description": "Z55500-Z55600-Z55700-moyenne-REGIO-2N", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 94.975, + "TrailerBogieBraking": "Disque", + "MotorBogieBraking": "2-essieux-fontes-+-semelle-composite", + "MotorWheelDiameter": 840, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 7, + "FirstSourcePosition": 6.7839, + "SourceSpacing": 13.5679, + "NbAxlePerVeh": 2.3, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 4, + "RefTransfer": 3, + "RefTraction": 4 + }, + "SNCF56": { + "Description": "Z55500-Z55600-Z55700-Z57000-longue-REGIO-2N", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 109.91, + "TrailerBogieBraking": "Disque", + "MotorBogieBraking": "2-essieux-fontes-+-semelle-composite", + "MotorWheelDiameter": 840, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 8, + "FirstSourcePosition": 6.8694, + "SourceSpacing": 13.7388, + "NbAxlePerVeh": 2.3, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 4, + "RefTransfer": 3, + "RefTraction": 4 + }, + "SNCF57": { + "Description": "Z56500-Z56700-V200-intervilles-REGIO-2N", + "Reference": "SNCF 25/02/2022", + "Vmax": 200, + "Length": 109.91, + "TrailerBogieBraking": "Disque", + "MotorBogieBraking": "2-essieux-fontes-+-semelle-composite", + "MotorWheelDiameter": 840, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 8, + "FirstSourcePosition": 6.8694, + "SourceSpacing": 13.7388, + "NbAxlePerVeh": 2.25, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 4, + "RefTransfer": 3, + "RefTraction": 4 + }, + "SNCF58": { + "Description": "Z55500-Z55600-Z55700-extra-longue-REGIO-2N", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 135.375, + "TrailerBogieBraking": "Disque", + "MotorBogieBraking": "2-essieux-fontes-+-semelle-composite", + "MotorWheelDiameter": 840, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 10, + "FirstSourcePosition": 6.7688, + "SourceSpacing": 13.5375, + "NbAxlePerVeh": 2.2, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 4, + "RefTransfer": 3, + "RefTraction": 4 + }, + "SNCF59": { + "Description": "Z56600-extra-longue-REGIO-2N-V200", + "Reference": "SNCF 25/02/2022", + "Vmax": 200, + "Length": 135.375, + "TrailerBogieBraking": "Disque", + "MotorBogieBraking": "2-essieux-fontes-+-semelle-composite", + "MotorWheelDiameter": 840, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 10, + "FirstSourcePosition": 6.7688, + "SourceSpacing": 13.5375, + "NbAxlePerVeh": 2.2, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 4, + "RefTransfer": 3, + "RefTraction": 4 + }, + "SNCF60": { + "Description": "Z5600-Z5700-quadricaisse", + "Reference": "SNCF 25/02/2022", + "Vmax": 140, + "Length": 98.76, + "TrailerBogieBraking": "Disque-garniture-composite-+-Semelle-composite", + "MotorBogieBraking": "Semelle-frittee", + "MotorWheelDiameter": 1020, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "RefAerodynamic": 0, + "NbCoach": 4, + "FirstSourcePosition": 12.345, + "SourceSpacing": 24.69, + "NbAxlePerVeh": 4, + "RefRoughness": 4, + "RefContact": 4, + "RefTransfer": 3, + "RefTraction": 3 + }, + "SNCF61": { + "Description": "Z5600-Z5700-pentacaisse", + "Reference": "SNCF 25/02/2022", + "Vmax": 140, + "Length": 123.04, + "TrailerBogieBraking": "Disque-garniture-composite-+-Semelle-composite", + "MotorBogieBraking": "Semelle-frittee", + "MotorWheelDiameter": 1020, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 5, + "FirstSourcePosition": 12.304, + "SourceSpacing": 24.608, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 4, + "RefTransfer": 3, + "RefTraction": 3 + }, + "SNCF62": { + "Description": "Z5600-Z5700-hexacaisse", + "Reference": "SNCF 25/02/2022", + "Vmax": 140, + "Length": 147.32, + "TrailerBogieBraking": "Disque-garniture-composite-+-Semelle-composite", + "MotorBogieBraking": "Semelle-frittee", + "MotorWheelDiameter": 1020, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 6, + "FirstSourcePosition": 12.2767, + "SourceSpacing": 24.5533, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 4, + "RefTransfer": 3, + "RefTraction": 3 + }, + "SNCF63": { + "Description": "Z6400-Z6500", + "Reference": "SNCF 25/02/2022", + "Vmax": 120, + "Length": 92.43, + "TrailerBogieBraking": "Semelle-composite", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 1020, + "TrailerWheelDiameter": 800, + "ReflectingBarrierEffect": 1, + "NbCoach": 4, + "FirstSourcePosition": 11.5538, + "SourceSpacing": 23.1075, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 4, + "RefTransfer": 3, + "RefTraction": 2 + }, + "SNCF64": { + "Description": "Z7300-Z7500-Z9500-Z9600-Z11500-Z2", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 50.2, + "TrailerBogieBraking": "Disque-garniture-composite", + "MotorBogieBraking": "Semelle-frittee", + "MotorWheelDiameter": 1000, + "TrailerWheelDiameter": 890, + "ReflectingBarrierEffect": 1, + "NbCoach": 2, + "FirstSourcePosition": 12.55, + "SourceSpacing": 25.1, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 1, + "RefContact": 4, + "RefTransfer": 2, + "RefTraction": 9 + }, + "SNCF65": { + "Description": "Z8100-Z8200-MI79", + "Reference": "SNCF 25/02/2022", + "Vmax": 140, + "Length": 104.05, + "TrailerBogieBraking": "Semelle-composite", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 1020, + "TrailerWheelDiameter": 920, + "ReflectingBarrierEffect": 1, + "NbCoach": 4, + "FirstSourcePosition": 13.0063, + "SourceSpacing": 26.0125, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 4, + "RefTransfer": 2, + "RefTraction": 2 + }, + "SNCF66": { + "Description": "Z8800-Z8900-Z2N", + "Reference": "SNCF 25/02/2022", + "Vmax": 140, + "Length": 98.76, + "TrailerBogieBraking": "Disque-garniture-composite-+-semelle-composite", + "MotorBogieBraking": "Semelle-frittee", + "MotorWheelDiameter": 1020, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 4, + "FirstSourcePosition": 12.345, + "SourceSpacing": 24.69, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 4, + "RefTransfer": 2, + "RefTraction": 3 + }, + "SNCF67": { + "Description": "U25500-Tram-Train-Avento", + "Reference": "SNCF 25/02/2022", + "Vmax": 100, + "Length": 36.678, + "TrailerBogieBraking": "Disque-garniture-composite", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 660, + "TrailerWheelDiameter": null, + "ReflectingBarrierEffect": 1, + "NbCoach": 5, + "FirstSourcePosition": 3.6678, + "SourceSpacing": 7.3356, + "NbAxlePerVeh": 1.6, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 2, + "RefTransfer": 4, + "RefTraction": 13 + }, + "SNCF68": { + "Description": "U52500-U53500-U53600-U53700-Tram-Train-Citadis-Dualis-�-TTNG", + "Reference": "SNCF 25/02/2022", + "Vmax": 100, + "Length": 42, + "TrailerBogieBraking": "Disque-garniture-composite", + "MotorBogieBraking": "-", + "MotorWheelDiameter": 660, + "TrailerWheelDiameter": null, + "ReflectingBarrierEffect": 1, + "NbCoach": 4, + "FirstSourcePosition": 5.25, + "SourceSpacing": 10.5, + "NbAxlePerVeh": 2.5, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 2, + "RefTransfer": 4, + "RefTraction": 13 + }, + "SNCF69": { + "Description": "Voiture-V2N", + "Reference": "SNCF 25/02/2022", + "Vmax": 160, + "Length": 26.4, + "TrailerBogieBraking": "Disque", + "MotorBogieBraking": "-", + "MotorWheelDiameter": null, + "TrailerWheelDiameter": 920, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 13.2, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 4, + "RefContact": 5, + "RefTransfer": 2, + "RefTraction": 11 + }, + "SNCF70": { + "Description": "Voiture-VB2N", + "Reference": "SNCF 25/02/2022", + "Vmax": 140, + "Length": 24.28, + "TrailerBogieBraking": "Disque-+-Semelle-fonte", + "MotorBogieBraking": "-", + "MotorWheelDiameter": null, + "TrailerWheelDiameter": 920, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 12.14, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 1, + "RefContact": 4, + "RefTransfer": 2, + "RefTraction": 11 + }, + "SNCF71": { + "Description": "Voiture-VO2N-Voiture-VR2N", + "Reference": "SNCF 25/02/2022", + "Vmax": 140, + "Length": 24.78, + "TrailerBogieBraking": "Disque-garniture-composite-+-semelle-fonte", + "MotorBogieBraking": "-", + "MotorWheelDiameter": null, + "TrailerWheelDiameter": 920, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 12.39, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 1, + "RefContact": 4, + "RefTransfer": 2, + "RefTraction": 11 + }, + "SNCF72": { + "Description": "Voiture-freinee-composite-LUNEA-VSOE", + "Reference": "SNCF 25/02/2022", + "Vmax": 200, + "Length": 26.4, + "TrailerBogieBraking": "Semelle-composite", + "MotorBogieBraking": "-", + "MotorWheelDiameter": null, + "TrailerWheelDiameter": 920, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 13.2, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 4, + "RefTransfer": 2, + "RefTraction": 11 + }, + "SNCF73": { + "Description": "Voiture-freinee-fonte-CORAIL-VU-VTU-VSE", + "Reference": "SNCF 25/02/2022", + "Vmax": 200, + "Length": 26.4, + "TrailerBogieBraking": "Semelle-fonte-disques-garniture-composite", + "MotorBogieBraking": "-", + "MotorWheelDiameter": null, + "TrailerWheelDiameter": 920, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 13.2, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 1, + "RefContact": 4, + "RefTransfer": 2, + "RefTraction": 12 + }, + "SNCF74": { + "Description": "Voiture-USI", + "Reference": "SNCF 25/02/2022", + "Vmax": 200, + "Length": 25.094, + "TrailerBogieBraking": "Semelle-composite", + "MotorBogieBraking": "-", + "MotorWheelDiameter": null, + "TrailerWheelDiameter": 920, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 12.547, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 4, + "RefTransfer": 2, + "RefTraction": 11 + }, + "SNCF75": { + "Description": "Rame-RIB-RIO-RRR", + "Reference": "SNCF 25/02/2022", + "Vmax": 140, + "Length": 99, + "TrailerBogieBraking": "Disque-garniture-composite+-semelle-frittee-ou-composite", + "MotorBogieBraking": "-", + "MotorWheelDiameter": null, + "TrailerWheelDiameter": 840, + "ReflectingBarrierEffect": 1, + "NbCoach": 4, + "FirstSourcePosition": 12.375, + "SourceSpacing": 24.75, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 5, + "RefTransfer": 2, + "RefTraction": 10 + }, + "SNCF76": { + "Description": "Wagon-FRET-PLAT-freine-composite-sans-chargement", + "Reference": "SNCF 25/02/2022", + "Vmax": 120, + "Length": 17, + "TrailerBogieBraking": "Semelle-composite", + "MotorBogieBraking": "-", + "MotorWheelDiameter": null, + "TrailerWheelDiameter": 920, + "ReflectingBarrierEffect": 0, + "NbCoach": 1, + "FirstSourcePosition": 8.5, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 3, + "RefTransfer": 2, + "RefTraction": 10 + }, + "SNCF77": { + "Description": "Wagon-FRET-PLAT-freine-composite-sans-chargement", + "Reference": "SNCF 25/02/2022", + "Vmax": 120, + "Length": 17, + "TrailerBogieBraking": "Semelle-composite", + "MotorBogieBraking": "-", + "MotorWheelDiameter": null, + "TrailerWheelDiameter": 920, + "ReflectingBarrierEffect": 0, + "NbCoach": 1, + "FirstSourcePosition": 8.5, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 1, + "RefContact": 4, + "RefTransfer": 2, + "RefTraction": 10 + }, + "SNCF78": { + "Description": "Wagon-FRET-freine-composite", + "Reference": "SNCF 25/02/2022", + "Vmax": 120, + "Length": 17, + "TrailerBogieBraking": "Semelle-composite", + "MotorBogieBraking": "-", + "MotorWheelDiameter": null, + "TrailerWheelDiameter": 920, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 8.5, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 4, + "RefTransfer": 2, + "RefTraction": 10 + }, + "SNCF79": { + "Description": "Wagon-FRET-freine-fonte", + "Reference": "SNCF 25/02/2022", + "Vmax": 120, + "Length": 17, + "TrailerBogieBraking": "Semelle-fonte", + "MotorBogieBraking": "-", + "MotorWheelDiameter": null, + "TrailerWheelDiameter": 920, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 8.5, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 1, + "RefContact": 4, + "RefTransfer": 2, + "RefTraction": 10 + }, + "SNCF80": { + "Description": "Fourgons-&-porte-autos-freine-composite", + "Reference": "SNCF 25/02/2022", + "Vmax": 200, + "Length": 26.4, + "TrailerBogieBraking": "Semelle-composite", + "MotorBogieBraking": "-", + "MotorWheelDiameter": null, + "TrailerWheelDiameter": 920, + "ReflectingBarrierEffect": 1, + "NbCoach": 1, + "FirstSourcePosition": 13.2, + "SourceSpacing": 0, + "NbAxlePerVeh": 4, + "RefAerodynamic": 0, + "RefRoughness": 2, + "RefContact": 4, + "RefTransfer": 2, + "RefTraction": 10 + } +} \ No newline at end of file diff --git a/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/Rail_Vehicles_SNCF_2015.json b/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/railway/RailwayVehiclesCnossos_2015.json similarity index 97% rename from noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/Rail_Vehicles_SNCF_2015.json rename to noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/railway/RailwayVehiclesCnossos_2015.json index c9b17062a..21b06ece6 100644 --- a/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/Rail_Vehicles_SNCF_2015.json +++ b/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/railway/RailwayVehiclesCnossos_2015.json @@ -1,21 +1,21 @@ {"FRET": { - "Description": "Example Cas test Palamade Train", - "Pmech": "0", - "Vmax": 320, - "Weight": 0, - "Length": 0, - "NbAxlePerVeh": 4, - "WheelDiameter": null, - "WheelDiameterCode": null, - "WheelMeasure": null, - "BreakCode": "CastIronBlock", - "AxleLoad": null, - "RefTransfer": 3, - "RefContact": 7, - "RefRoughness": 4, - "RefTraction": 9, - "RefAerodynamic": 2 - }, + "Description": "Example Cas test Palamade Train", + "Pmech": "0", + "Vmax": 320, + "Weight": 0, + "Length": 0, + "NbAxlePerVeh": 4, + "WheelDiameter": null, + "WheelDiameterCode": null, + "WheelMeasure": null, + "BreakCode": "CastIronBlock", + "AxleLoad": null, + "RefTransfer": 3, + "RefContact": 7, + "RefRoughness": 4, + "RefTraction": 9, + "RefAerodynamic": 2 +}, "CORAIL": { "Description": "Example Cas test Plamade Train", "Pmech": "0", diff --git a/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/railway/RailwayVehiclesNMPB.json b/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/railway/RailwayVehiclesNMPB.json new file mode 100644 index 000000000..e956aba1f --- /dev/null +++ b/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/railway/RailwayVehiclesNMPB.json @@ -0,0 +1,6060 @@ +{ + "TGV00-38-100":{ + "length":200.19, + "braking":"Bogies porteurs : disques - Bogies moteurs : semelle composite", + "Vmax":300, + "Vref":300, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"TGV00-38-100-0cm", + "Source-number-0cm":13, + "Source-spacing-0cm":15.8, + "Source-name-50cm":"TGV00-38-100-50cm", + "Source-number-50cm":13, + "Source-spacing-50cm":15.8, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 114.7, + 113.2, + 111.4, + 111.2, + 112.2, + 111.8, + 111.3, + 110.6, + 110.7, + 113.1, + 113.4, + 113.8, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 113.4, + 112.9, + 114.7, + 113.7, + 110.4, + 107.4], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "TGV-D":{ + "length":200.19, + "braking":"Bogies porteurs : disques - Bogies moteurs : semelle composite", + "Vmax":320, + "Vref":300, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"TGV-D-0cm", + "Source-number-0cm":13, + "Source-spacing-0cm":15.8, + "Source-name-50cm":"TGV-D-50cm", + "Source-number-50cm":13, + "Source-spacing-50cm":15.8, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 114.7, + 113.2, + 111.4, + 111.2, + 112.2, + 111.8, + 111.3, + 110.6, + 110.7, + 113.1, + 113.4, + 113.8, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 113.4, + 112.9, + 114.7, + 113.7, + 110.4, + 107.4], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "TGV-A":{ + "length":237.59, + "braking":"Bogies porteurs : disques - Bogies moteurs : semelle composite", + "Vmax":300, + "Vref":300, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"TGV-A-0cm", + "Source-number-0cm":15, + "Source-spacing-0cm":16.3, + "Source-name-50cm":"TGV-A-50cm", + "Source-number-50cm":15, + "Source-spacing-50cm":16.3, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 113.1, + 110.8, + 111.5, + 111.6, + 118.5, + 122.6, + 118.9, + 109.2, + 109, + 111, + 110.7, + 110, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 110.2, + 111, + 112.7, + 114, + 110.5, + 105.9], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "TGV-TM":{ + "length":393.72, + "braking":"Bogies porteurs : disques - Bogies moteurs : semelle composite", + "Vmax":300, + "Vref":300, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"TGV-TM-0cm", + "Source-number-0cm":24, + "Source-spacing-0cm":16.7, + "Source-name-50cm":"TGV-TM-50cm", + "Source-number-50cm":24, + "Source-spacing-50cm":16.7, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 113.2, + 110.9, + 111.6, + 111.7, + 118.6, + 122.7, + 119, + 109.3, + 109.1, + 111.1, + 110.8, + 110.1, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 110.2, + 111, + 112.7, + 113.9, + 110.5, + 105.9], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "TGV4300":{ + "length":200.19, + "braking":"Bogies porteurs : disques - Bogies moteurs : semelle composite", + "Vmax":300, + "Vref":300, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"TGV4300-0cm", + "Source-number-0cm":13, + "Source-spacing-0cm":15.8, + "Source-name-50cm":"TGV4300-50cm", + "Source-number-50cm":13, + "Source-spacing-50cm":15.8, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 114.7, + 113.2, + 111.4, + 111.2, + 112.2, + 111.8, + 111.3, + 110.6, + 110.7, + 113.1, + 113.4, + 113.8, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 113.4, + 112.9, + 114.7, + 113.7, + 110.4, + 107.4], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "TGV-R":{ + "length":200.19, + "braking":"Bogies porteurs : disques - Bogies moteurs : semelle composite", + "Vmax":320, + "Vref":300, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"TGV-R-0cm", + "Source-number-0cm":13, + "Source-spacing-0cm":15.8, + "Source-name-50cm":"TGV-R-50cm", + "Source-number-50cm":13, + "Source-spacing-50cm":15.8, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 114.7, + 113.2, + 111.4, + 111.2, + 112.2, + 111.8, + 111.3, + 110.6, + 110.7, + 113.1, + 113.4, + 113.8, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 113.4, + 112.9, + 114.7, + 113.7, + 110.4, + 107.4], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "A1A68000":{ + "length":18.01, + "braking":"Semelle fonte", + "Vmax":130, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"A1A68000-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":9.5, + "Source-name-50cm":"A1A68000-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":9.5, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 114.5, + 109.5, + 111.4, + 109.5, + 107.4, + 108.7, + 111.1, + 114.6, + 119.6, + 117.3, + 116.7, + 113.8, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 111.9, + 110.2, + 108.6, + 105.8, + 104.6, + 103.4], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "BB15000":{ + "length":17.48, + "braking":"Semelle frittee", + "Vmax":160, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"BB15000-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":9.7, + "Source-name-50cm":"BB15000-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":9.7, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 110.3, + 107.4, + 107.1, + 107.9, + 109.6, + 109.9, + 109.9, + 109.2, + 111.7, + 116.6, + 112.3, + 110.4, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 110.3, + 110, + 107.8, + 107.3, + 106.3, + 104.7], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "BB16000":{ + "length":16.68, + "braking":"Semelle fonte", + "Vmax":160, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"BB16000-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":9.2, + "Source-name-50cm":"BB16000-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":9.2, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 103.7, + 102.3, + 101.3, + 105.2, + 108, + 108.7, + 106.8, + 106.7, + 111.7, + 120.2, + 117.4, + 114.4, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 119.2, + 114.3, + 111, + 109.3, + 108.5, + 104.9], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "BB16500":{ + "length":14.4, + "braking":"Semelle fonte", + "Vmax":140, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"BB16500-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":8.2, + "Source-name-50cm":"BB16500-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":8.2, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 103.7, + 102.3, + 101.3, + 105.2, + 108, + 108.7, + 106.8, + 106.7, + 111.7, + 120.2, + 117.4, + 114.4, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 119.2, + 114.3, + 111, + 109.3, + 108.5, + 104.9], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "BB17000":{ + "length":14.94, + "braking":"Semelle composite", + "Vmax":140, + "Vref":140, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"BB17000-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":8.5, + "Source-name-50cm":"BB17000-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":8.5, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 111.1, + 107.5, + 104.6, + 104.6, + 107.2, + 104.7, + 105.2, + 113.4, + 110.7, + 113.7, + 115.1, + 111.3, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 108.7, + 108.3, + 107.4, + 105.4, + 104.7, + 102], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "BB22200":{ + "length":17.48, + "braking":"Semelle frittee", + "Vmax":160, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"BB22200-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":9.7, + "Source-name-50cm":"BB22200-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":9.7, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 110.3, + 107.4, + 107.1, + 107.9, + 109.6, + 109.9, + 109.9, + 109.2, + 111.7, + 116.6, + 112.3, + 110.4, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 110.3, + 110, + 107.8, + 107.3, + 106.3, + 104.7], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "BB25100":{ + "length":16.7, + "braking":"Semelle fonte", + "Vmax":160, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"BB25100-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":9.2, + "Source-name-50cm":"BB25100-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":9.2, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 103.7, + 102.3, + 101.3, + 105.2, + 108, + 108.7, + 106.8, + 106.7, + 111.7, + 120.2, + 117.4, + 114.4, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 119.2, + 114.3, + 111, + 109.3, + 108.5, + 104.9], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "BB25500":{ + "length":14.7, + "braking":"Semelle fonte", + "Vmax":140, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"BB25500-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":8.5, + "Source-name-50cm":"BB25500-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":8.5, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 103.7, + 102.3, + 101.3, + 105.2, + 108, + 108.7, + 106.8, + 106.7, + 111.7, + 120.2, + 117.4, + 114.4, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 119.2, + 114.3, + 111, + 109.3, + 108.5, + 104.9], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "BB26000":{ + "length":17.71, + "braking":"Semelle frittee", + "Vmax":200, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"BB26000-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":9.7, + "Source-name-50cm":"BB26000-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":9.7, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 110.3, + 107.4, + 107.1, + 107.9, + 109.6, + 109.9, + 109.9, + 109.2, + 111.7, + 116.6, + 112.3, + 110.4, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 110.3, + 110, + 107.8, + 107.3, + 106.3, + 104.7], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "BB27000":{ + "length":19.72, + "braking":"Semelle composite", + "Vmax":140, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"BB27000-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":10.1, + "Source-name-50cm":"BB27000-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":10.1, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 110.3, + 107.4, + 107.1, + 107.9, + 109.6, + 109.9, + 109.9, + 109.2, + 111.7, + 116.6, + 112.3, + 110.4, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 110.3, + 110, + 107.8, + 107.3, + 106.3, + 104.7], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "BB36000":{ + "length":19.11, + "braking":"Disque + semelle fonte", + "Vmax":200, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"BB36000-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":10.4, + "Source-name-50cm":"BB36000-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":10.4, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 110.3, + 107.4, + 107.1, + 107.9, + 109.6, + 109.9, + 109.9, + 109.2, + 111.7, + 116.6, + 112.3, + 110.4, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 110.3, + 110, + 107.8, + 107.3, + 106.3, + 104.7], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "BB37000":{ + "length":19.72, + "braking":"Semelle composite", + "Vmax":140, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"BB37000-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":10.1, + "Source-name-50cm":"BB37000-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":10.1, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 110.3, + 107.4, + 107.1, + 107.9, + 109.6, + 109.9, + 109.9, + 109.2, + 111.7, + 116.6, + 112.3, + 110.4, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 110.3, + 110, + 107.8, + 107.3, + 106.3, + 104.7], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "BB61000":{ + "length":14.7, + "braking":"??", + "Vmax":100, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"BB61000-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":7.2, + "Source-name-50cm":"BB61000-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":7.2, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 114.5, + 109.5, + 111.4, + 109.5, + 107.4, + 108.7, + 111.1, + 114.6, + 119.6, + 117.3, + 116.7, + 113.8, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 111.9, + 110.2, + 108.6, + 105.8, + 104.6, + 103.4], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "BB62400":{ + "length":12.52, + "braking":"Semelle fonte", + "Vmax":80, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"BB62400-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":6.8, + "Source-name-50cm":"BB62400-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":6.8, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 114.5, + 109.5, + 111.4, + 109.5, + 107.4, + 108.7, + 111.1, + 114.6, + 119.6, + 117.3, + 116.7, + 113.8, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 111.9, + 110.2, + 108.6, + 105.8, + 104.6, + 103.4], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "BB63000":{ + "length":14.68, + "braking":"Semelle fonte", + "Vmax":90, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"BB63000-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":7.5, + "Source-name-50cm":"BB63000-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":7.5, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 114.5, + 109.5, + 111.4, + 109.5, + 107.4, + 108.7, + 111.1, + 114.6, + 119.6, + 117.3, + 116.7, + 113.8, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 111.9, + 110.2, + 108.6, + 105.8, + 104.6, + 103.4], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "BB66000":{ + "length":14.89, + "braking":"Semelle fonte", + "Vmax":120, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"BB66000-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":8.5, + "Source-name-50cm":"BB66000-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":8.5, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 114.5, + 109.5, + 111.4, + 109.5, + 107.4, + 108.7, + 111.1, + 114.6, + 119.6, + 117.3, + 116.7, + 113.8, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 111.9, + 110.2, + 108.6, + 105.8, + 104.6, + 103.4], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "BB66400":{ + "length":14.89, + "braking":"Semelle composite", + "Vmax":120, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"BB66400-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":8.5, + "Source-name-50cm":"BB66400-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":8.5, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 114.5, + 109.5, + 111.4, + 109.5, + 107.4, + 108.7, + 111.1, + 114.6, + 119.6, + 117.3, + 116.7, + 113.8, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 111.9, + 110.2, + 108.6, + 105.8, + 104.6, + 103.4], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "BB67000":{ + "length":17.09, + "braking":"Semelle fonte", + "Vmax":140, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"BB67000-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":9.8, + "Source-name-50cm":"BB67000-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":9.8, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 114.5, + 109.5, + 111.4, + 109.5, + 107.4, + 108.7, + 111.1, + 114.6, + 119.6, + 117.3, + 116.7, + 113.8, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 111.9, + 110.2, + 108.6, + 105.8, + 104.6, + 103.4], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "BB67400":{ + "length":17.09, + "braking":"Semelle frittee", + "Vmax":140, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"BB67400-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":9.8, + "Source-name-50cm":"BB67400-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":9.8, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 114.5, + 109.5, + 111.4, + 109.5, + 107.4, + 108.7, + 111.1, + 114.6, + 119.6, + 117.3, + 116.7, + 113.8, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 111.9, + 110.2, + 108.6, + 105.8, + 104.6, + 103.4], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "BB7200":{ + "length":17.48, + "braking":"Semelle frittee", + "Vmax":160, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"BB7200-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":9.7, + "Source-name-50cm":"BB7200-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":9.7, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 110.3, + 107.4, + 107.1, + 107.9, + 109.6, + 109.9, + 109.9, + 109.2, + 111.7, + 116.6, + 112.3, + 110.4, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 110.3, + 110, + 107.8, + 107.3, + 106.3, + 104.7], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "BB80000":{ + "length":12.93, + "braking":"Semelle fonte", + "Vmax":80, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"BB80000-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":6, + "Source-name-50cm":"BB80000-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":6, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 103.7, + 102.3, + 101.3, + 105.2, + 108, + 108.7, + 106.8, + 106.7, + 111.7, + 120.2, + 117.4, + 114.4, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 119.2, + 114.3, + 111, + 109.3, + 108.5, + 104.9], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "BB8100":{ + "length":12.93, + "braking":"Semelle fonte", + "Vmax":105, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"BB8100-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":6, + "Source-name-50cm":"BB8100-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":6, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 103.7, + 102.3, + 101.3, + 105.2, + 108, + 108.7, + 106.8, + 106.7, + 111.7, + 120.2, + 117.4, + 114.4, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 119.2, + 114.3, + 111, + 109.3, + 108.5, + 104.9], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "BB8500":{ + "length":14.9, + "braking":"Semelle fonte", + "Vmax":140, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"BB8500-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":8.5, + "Source-name-50cm":"BB8500-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":8.5, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 103.7, + 102.3, + 101.3, + 105.2, + 108, + 108.7, + 106.8, + 106.7, + 111.7, + 120.2, + 117.4, + 114.4, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 119.2, + 114.3, + 111, + 109.3, + 108.5, + 104.9], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "BB88500":{ + "length":14.7, + "braking":"Semelle fonte", + "Vmax":100, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"BB88500-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":8.5, + "Source-name-50cm":"BB88500-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":8.5, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 103.7, + 102.3, + 101.3, + 105.2, + 108, + 108.7, + 106.8, + 106.7, + 111.7, + 120.2, + 117.4, + 114.4, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 119.2, + 114.3, + 111, + 109.3, + 108.5, + 104.9], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "BB9200":{ + "length":16.2, + "braking":"Semelle fonte", + "Vmax":160, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"BB9200-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":9.2, + "Source-name-50cm":"BB9200-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":9.2, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 103.7, + 102.3, + 101.3, + 105.2, + 108, + 108.7, + 106.8, + 106.7, + 111.7, + 120.2, + 117.4, + 114.4, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 119.2, + 114.3, + 111, + 109.3, + 108.5, + 104.9], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "BB9600":{ + "length":14.93, + "braking":"Semelle fonte", + "Vmax":140, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"BB9600-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":8.2, + "Source-name-50cm":"BB9600-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":8.2, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 103.7, + 102.3, + 101.3, + 105.2, + 108, + 108.7, + 106.8, + 106.7, + 111.7, + 120.2, + 117.4, + 114.4, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 119.2, + 114.3, + 111, + 109.3, + 108.5, + 104.9], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "CC6500":{ + "length":20.19, + "braking":"Semelle frittee", + "Vmax":160, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"CC6500-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":12, + "Source-name-50cm":"CC6500-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":12, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 103.7, + 102.3, + 101.3, + 105.2, + 108, + 108.7, + 106.8, + 106.7, + 111.7, + 120.2, + 117.4, + 114.4, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 119.2, + 114.3, + 111, + 109.3, + 108.5, + 104.9], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "CC65500":{ + "length":19.42, + "braking":"Semelle fonte", + "Vmax":80, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"CC65500-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":9.5, + "Source-name-50cm":"CC65500-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":9.5, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 114.5, + 109.5, + 111.4, + 109.5, + 107.4, + 108.7, + 111.1, + 114.6, + 119.6, + 117.3, + 116.7, + 113.8, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 111.9, + 110.2, + 108.6, + 105.8, + 104.6, + 103.4], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "CC72000":{ + "length":20.19, + "braking":"Semelle composite", + "Vmax":160, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"CC72000-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":12, + "Source-name-50cm":"CC72000-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":12, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 114.5, + 109.5, + 111.4, + 109.5, + 107.4, + 108.7, + 111.1, + 114.6, + 119.6, + 117.3, + 116.7, + 113.8, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 111.9, + 110.2, + 108.6, + 105.8, + 104.6, + 103.4], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "TBB64800":{ + "length":11.39, + "braking":"Semelle fonte", + "Vmax":80, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"TBB64800-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":4.2, + "Source-name-50cm":"TBB64800-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":4.2, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 114.5, + 109.5, + 111.4, + 109.5, + 107.4, + 108.7, + 111.1, + 114.6, + 119.6, + 117.3, + 116.7, + 113.8, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 111.9, + 110.2, + 108.6, + 105.8, + 104.6, + 103.4], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "B81500-4":{ + "length":72.8, + "braking":"Disque", + "Vmax":160, + "Vref":140, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"B81500-4-0cm", + "Source-number-0cm":5, + "Source-spacing-0cm":15.9, + "Source-name-50cm":"B81500-4-50cm", + "Source-number-50cm":5, + "Source-spacing-50cm":15.9, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 104.8, + 99.3, + 103.3, + 99.4, + 97.9, + 98.2, + 97.6, + 99.9, + 102.5, + 105.1, + 105.8, + 103.4, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 102.2, + 102.9, + 103, + 101, + 98.9, + 95.8], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "B81500-3":{ + "length":57.4, + "braking":"Disque", + "Vmax":160, + "Vref":140, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"B81500-3-0cm", + "Source-number-0cm":4, + "Source-spacing-0cm":16.1, + "Source-name-50cm":"B81500-3-50cm", + "Source-number-50cm":4, + "Source-spacing-50cm":16.1, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 104.8, + 99.3, + 103.3, + 99.4, + 97.9, + 98.2, + 97.6, + 99.9, + 102.5, + 105.1, + 105.8, + 103.4, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 102.2, + 102.9, + 103, + 101, + 98.9, + 95.8], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "X2100":{ + "length":22.4, + "braking":"Semelle fonte", + "Vmax":140, + "Vref":200, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"X2100-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":15.4, + "Source-name-50cm":"X2100-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":15.4, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 103.8, + 100.2, + 98.4, + 98, + 100, + 103.2, + 102.3, + 103.5, + 109.8, + 116.7, + 120.2, + 117.2, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 119.3, + 120.5, + 119.6, + 116.3, + 112.1, + 105.9], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "X2200":{ + "length":22.4, + "braking":"Semelle frittee", + "Vmax":140, + "Vref":200, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"X2200-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":15.4, + "Source-name-50cm":"X2200-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":15.4, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 103.8, + 100.2, + 98.4, + 98, + 100, + 103.2, + 102.3, + 103.5, + 109.8, + 116.7, + 120.2, + 117.2, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 119.3, + 120.5, + 119.6, + 116.3, + 112.1, + 105.9], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "X2700":{ + "length":52.6805, + "braking":"Semelle fonte", + "Vmax":140, + "Vref":200, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"X2700-0cm", + "Source-number-0cm":4, + "Source-spacing-0cm":14.7, + "Source-name-50cm":"X2700-50cm", + "Source-number-50cm":4, + "Source-spacing-50cm":14.7, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 103.8, + 100.2, + 98.4, + 98, + 100, + 103.2, + 102.3, + 103.5, + 109.8, + 116.7, + 120.2, + 117.2, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 119.3, + 120.5, + 119.6, + 116.3, + 112.1, + 105.9], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "X2800":{ + "length":27.73, + "braking":"Semelle fonte", + "Vmax":120, + "Vref":200, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"X2800-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":19, + "Source-name-50cm":"X2800-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":19, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 103.8, + 100.2, + 98.4, + 98, + 100, + 103.2, + 102.3, + 103.5, + 109.8, + 116.7, + 120.2, + 117.2, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 119.3, + 120.5, + 119.6, + 116.3, + 112.1, + 105.9], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "X4300-mod":{ + "length":43.48, + "braking":"Semelle fonte", + "Vmax":140, + "Vref":200, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"X4300-mod-0cm", + "Source-number-0cm":4, + "Source-spacing-0cm":11.9, + "Source-name-50cm":"X4300-mod-50cm", + "Source-number-50cm":4, + "Source-spacing-50cm":11.9, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 103.8, + 100.2, + 98.4, + 98, + 100, + 103.2, + 102.3, + 103.5, + 109.8, + 116.7, + 120.2, + 117.2, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 119.3, + 120.5, + 119.6, + 116.3, + 112.1, + 105.9], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "X4300":{ + "length":42.48, + "braking":"Semelle fonte", + "Vmax":120, + "Vref":200, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"X4300-0cm", + "Source-number-0cm":4, + "Source-spacing-0cm":11.9, + "Source-name-50cm":"X4300-50cm", + "Source-number-50cm":4, + "Source-spacing-50cm":11.9, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 103.8, + 100.2, + 98.4, + 98, + 100, + 103.2, + 102.3, + 103.5, + 109.8, + 116.7, + 120.2, + 117.2, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 119.3, + 120.5, + 119.6, + 116.3, + 112.1, + 105.9], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "X4900":{ + "length":64.23, + "braking":"Semelle fonte", + "Vmax":140, + "Vref":200, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"X4900-0cm", + "Source-number-0cm":6, + "Source-spacing-0cm":11.6, + "Source-name-50cm":"X4900-50cm", + "Source-number-50cm":6, + "Source-spacing-50cm":11.6, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 103.8, + 100.2, + 98.4, + 98, + 100, + 103.2, + 102.3, + 103.5, + 109.8, + 116.7, + 120.2, + 117.2, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 119.3, + 120.5, + 119.6, + 116.3, + 112.1, + 105.9], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "X72500-Bi":{ + "length":52.9, + "braking":"Disque + semelle composite", + "Vmax":160, + "Vref":140, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"X72500-Bi-0cm", + "Source-number-0cm":4, + "Source-spacing-0cm":14.9, + "Source-name-50cm":"X72500-Bi-50cm", + "Source-number-50cm":4, + "Source-spacing-50cm":14.9, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 104.8, + 99.3, + 103.3, + 99.4, + 97.9, + 98.2, + 97.6, + 99.9, + 102.5, + 105.1, + 105.8, + 103.4, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 102.2, + 102.9, + 103, + 101, + 98.9, + 95.8], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "X72500-3":{ + "length":78.5, + "braking":"Disue + Semelle composite", + "Vmax":160, + "Vref":140, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"X72500-3-0cm", + "Source-number-0cm":6, + "Source-spacing-0cm":14.1, + "Source-name-50cm":"X72500-3-50cm", + "Source-number-50cm":6, + "Source-spacing-50cm":14.1, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 104.8, + 99.3, + 103.3, + 99.4, + 97.9, + 98.2, + 97.6, + 99.9, + 102.5, + 105.1, + 105.8, + 103.4, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 102.2, + 102.9, + 103, + 101, + 98.9, + 95.8], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "X73500":{ + "length":28.9, + "braking":"Disque", + "Vmax":140, + "Vref":140, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"X73500-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":17.5, + "Source-name-50cm":"X73500-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":17.5, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 108.4, + 101.4, + 99.3, + 96.7, + 94.4, + 95, + 96.6, + 98.7, + 100.6, + 102.3, + 104, + 103.3, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 105.5, + 103, + 100.7, + 102.4, + 102.6, + 100.5], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "X76500":{ + "length":57.4, + "braking":"Disque", + "Vmax":160, + "Vref":140, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"X76500-0cm", + "Source-number-0cm":6, + "Source-spacing-0cm":9.6, + "Source-name-50cm":"X76500-50cm", + "Source-number-50cm":6, + "Source-spacing-50cm":9.6, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 104.8, + 99.3, + 103.3, + 99.4, + 97.9, + 98.2, + 97.6, + 99.9, + 102.5, + 105.1, + 105.8, + 103.4, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 102.2, + 102.9, + 103, + 101, + 98.9, + 95.8], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "X97100":{ + "length":15.57, + "braking":"Semelle fonte", + "Vmax":90, + "Vref":140, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"X97100-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":8.3, + "Source-name-50cm":"X97100-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":8.3, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 104.8, + 99.3, + 103.3, + 99.4, + 97.9, + 98.2, + 97.6, + 99.9, + 102.5, + 105.1, + 105.8, + 103.4, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 102.2, + 102.9, + 103, + 101, + 98.9, + 95.8], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "Z20500-5-FC":{ + "length":129.4, + "braking":"Bogie Moteur : semelle fritteeBogie Porteur : disque+ semelle composite", + "Vmax":140, + "Vref":120, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"Z20500-5-FC-0cm", + "Source-number-0cm":10, + "Source-spacing-0cm":13.6, + "Source-name-50cm":"Z20500-5-FC-50cm", + "Source-number-50cm":10, + "Source-spacing-50cm":13.6, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 98.1, + 97.3, + 96, + 94.6, + 93.2, + 94.9, + 97.7, + 100.8, + 100.5, + 105.3, + 105.1, + 101.8, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 100.8, + 99.8, + 99.1, + 99.9, + 98.2, + 95.6], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "Z20500-4-FC":{ + "length":103, + "braking":"Bogie Moteur : semelle fritteeBogie Porteur : disque+ semelle composite", + "Vmax":140, + "Vref":120, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"Z20500-4-FC-0cm", + "Source-number-0cm":8, + "Source-spacing-0cm":13.7, + "Source-name-50cm":"Z20500-4-FC-50cm", + "Source-number-50cm":8, + "Source-spacing-50cm":13.7, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 98.1, + 97.3, + 96, + 94.6, + 93.2, + 94.9, + 97.7, + 100.8, + 100.5, + 105.3, + 105.1, + 101.8, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 100.8, + 99.8, + 99.1, + 99.9, + 98.2, + 95.6], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "Z21500":{ + "length":79.2, + "braking":"Disque", + "Vmax":200, + "Vref":120, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"Z21500-0cm", + "Source-number-0cm":6, + "Source-spacing-0cm":14.2, + "Source-name-50cm":"Z21500-50cm", + "Source-number-50cm":6, + "Source-spacing-50cm":14.2, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 95.6, + 94.2, + 94.8, + 98.1, + 97, + 96.3, + 96.8, + 99.5, + 100.9, + 102.2, + 103, + 103.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 98.8, + 97.8, + 95.9, + 94.6, + 92.5, + 89.7], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "Z22500-5-FC":{ + "length":112, + "braking":"Disque + Semelle composite", + "Vmax":140, + "Vref":120, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"Z22500-5-FC-0cm", + "Source-number-0cm":10, + "Source-spacing-0cm":11.7, + "Source-name-50cm":"Z22500-5-FC-50cm", + "Source-number-50cm":10, + "Source-spacing-50cm":11.7, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 95.6, + 94.2, + 94.8, + 98.1, + 97, + 96.3, + 96.8, + 99.5, + 100.9, + 102.2, + 103, + 103.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 98.8, + 97.8, + 95.9, + 94.6, + 92.5, + 89.7], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "Z22500-4-FC":{ + "length":89.9, + "braking":"Disque + Semelle composite", + "Vmax":140, + "Vref":120, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"Z22500-4-FC-0cm", + "Source-number-0cm":8, + "Source-spacing-0cm":11.9, + "Source-name-50cm":"Z22500-4-FC-50cm", + "Source-number-50cm":8, + "Source-spacing-50cm":11.9, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 95.6, + 94.2, + 94.8, + 98.1, + 97, + 96.3, + 96.8, + 99.5, + 100.9, + 102.2, + 103, + 103.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 98.8, + 97.8, + 95.9, + 94.6, + 92.5, + 89.7], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "Z23500":{ + "length":52.5, + "braking":"Disque + Semelle composite", + "Vmax":140, + "Vref":120, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"Z23500-0cm", + "Source-number-0cm":4, + "Source-spacing-0cm":14.7, + "Source-name-50cm":"Z23500-50cm", + "Source-number-50cm":4, + "Source-spacing-50cm":14.7, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 95.6, + 94.2, + 94.8, + 98.1, + 97, + 96.3, + 96.8, + 99.5, + 100.9, + 102.2, + 103, + 103.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 98.8, + 97.8, + 95.9, + 94.6, + 92.5, + 89.7], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "Z24500-5":{ + "length":133.9, + "braking":"Disque + Semelle composite", + "Vmax":160, + "Vref":120, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"Z24500-5-0cm", + "Source-number-0cm":10, + "Source-spacing-0cm":14, + "Source-name-50cm":"Z24500-5-50cm", + "Source-number-50cm":10, + "Source-spacing-50cm":14, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 95.6, + 94.2, + 94.8, + 98.1, + 97, + 96.3, + 96.8, + 99.5, + 100.9, + 102.2, + 103, + 103.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 98.8, + 97.8, + 95.9, + 94.6, + 92.5, + 89.7], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "Z24500-4":{ + "length":107.5, + "braking":"Disque + Semelle composite", + "Vmax":160, + "Vref":120, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"Z24500-4-0cm", + "Source-number-0cm":8, + "Source-spacing-0cm":14.2, + "Source-name-50cm":"Z24500-4-50cm", + "Source-number-50cm":8, + "Source-spacing-50cm":14.2, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 95.6, + 94.2, + 94.8, + 98.1, + 97, + 96.3, + 96.8, + 99.5, + 100.9, + 102.2, + 103, + 103.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 98.8, + 97.8, + 95.9, + 94.6, + 92.5, + 89.7], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "Z27500-4":{ + "length":72.8, + "braking":"Disque", + "Vmax":160, + "Vref":120, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"Z27500-4-0cm", + "Source-number-0cm":5, + "Source-spacing-0cm":15.9, + "Source-name-50cm":"Z27500-4-50cm", + "Source-number-50cm":5, + "Source-spacing-50cm":15.9, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 95.6, + 94.2, + 94.8, + 98.1, + 97, + 96.3, + 96.8, + 99.5, + 100.9, + 102.2, + 103, + 103.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 98.8, + 97.8, + 95.9, + 94.6, + 92.5, + 89.7], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "Z27500-3":{ + "length":57.4, + "braking":"Disque", + "Vmax":160, + "Vref":120, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"Z27500-3-0cm", + "Source-number-0cm":4, + "Source-spacing-0cm":16.1, + "Source-name-50cm":"Z27500-3-50cm", + "Source-number-50cm":4, + "Source-spacing-50cm":16.1, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 95.6, + 94.2, + 94.8, + 98.1, + 97, + 96.3, + 96.8, + 99.5, + 100.9, + 102.2, + 103, + 103.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 98.8, + 97.8, + 95.9, + 94.6, + 92.5, + 89.7], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "Z5300":{ + "length":103.55, + "braking":"Semelle composite", + "Vmax":120, + "Vref":120, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"Z5300-0cm", + "Source-number-0cm":8, + "Source-spacing-0cm":13.7, + "Source-name-50cm":"Z5300-50cm", + "Source-number-50cm":8, + "Source-spacing-50cm":13.7, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 97.9, + 94.4, + 94.2, + 94.2, + 94.2, + 93, + 95.6, + 99.4, + 104.3, + 106.5, + 105.3, + 102.5, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 99.2, + 98, + 95.8, + 94.5, + 92.8, + 90.9], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "Z5600-6":{ + "length":147.32, + "braking":"Bogie Moteur : semelle fritteeBogie Porteur : disque + Semelle fonte", + "Vmax":140, + "Vref":120, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"Z5600-6-0cm", + "Source-number-0cm":12, + "Source-spacing-0cm":12.7, + "Source-name-50cm":"Z5600-6-50cm", + "Source-number-50cm":12, + "Source-spacing-50cm":12.7, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 96.6, + 96, + 94.3, + 93.8, + 92.6, + 94.5, + 97.7, + 102.7, + 105, + 109.8, + 109.5, + 106.6, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 104.6, + 102.4, + 100.7, + 101, + 99.2, + 95.7], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "Z5600-5":{ + "length":123.04, + "braking":"Bogie Moteur : semelle fritteeBogie Porteur : disque + Semelle fonte", + "Vmax":140, + "Vref":120, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"Z5600-5-0cm", + "Source-number-0cm":10, + "Source-spacing-0cm":12.9, + "Source-name-50cm":"Z5600-5-50cm", + "Source-number-50cm":10, + "Source-spacing-50cm":12.9, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 96.6, + 96, + 94.3, + 93.8, + 92.6, + 94.5, + 97.7, + 102.7, + 105, + 109.8, + 109.5, + 106.6, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 104.6, + 102.4, + 100.7, + 101, + 99.2, + 95.7], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "Z5600-4":{ + "length":98.76, + "braking":"Bogie Moteur : semelle fritteeBogie Porteur : disque + Semelle fonte", + "Vmax":140, + "Vref":120, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"Z5600-4-0cm", + "Source-number-0cm":8, + "Source-spacing-0cm":13.1, + "Source-name-50cm":"Z5600-4-50cm", + "Source-number-50cm":8, + "Source-spacing-50cm":13.1, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 96.6, + 96, + 94.3, + 93.8, + 92.6, + 94.5, + 97.7, + 102.7, + 105, + 109.8, + 109.5, + 106.6, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 104.6, + 102.4, + 100.7, + 101, + 99.2, + 95.7], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "Z6100":{ + "length":74.45, + "braking":"Semelle composite", + "Vmax":120, + "Vref":90, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"Z6100-0cm", + "Source-number-0cm":6, + "Source-spacing-0cm":13.5, + "Source-name-50cm":"Z6100-50cm", + "Source-number-50cm":6, + "Source-spacing-50cm":13.5, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 95.3, + 97.5, + 100.2, + 96.7, + 95.5, + 97.5, + 98.8, + 104.6, + 101.9, + 104.2, + 100.1, + 97.5, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 94.9, + 93.5, + 91.7, + 90.4, + 88, + 86], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "Z6300":{ + "length":60.1, + "braking":"Semelle composite", + "Vmax":120, + "Vref":90, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"Z6300-0cm", + "Source-number-0cm":6, + "Source-spacing-0cm":10.7, + "Source-name-50cm":"Z6300-50cm", + "Source-number-50cm":6, + "Source-spacing-50cm":10.7, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 95.3, + 97.5, + 100.2, + 96.7, + 95.5, + 97.5, + 98.8, + 104.6, + 101.9, + 104.2, + 100.1, + 97.5, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 94.9, + 93.5, + 91.7, + 90.4, + 88, + 86], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "Z6400":{ + "length":92.43, + "braking":"Semelle composite", + "Vmax":120, + "Vref":90, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"Z6400-0cm", + "Source-number-0cm":8, + "Source-spacing-0cm":12.1, + "Source-name-50cm":"Z6400-50cm", + "Source-number-50cm":8, + "Source-spacing-50cm":12.1, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 95.3, + 97.5, + 100.2, + 96.7, + 95.5, + 97.5, + 98.8, + 104.6, + 101.9, + 104.2, + 100.1, + 97.5, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 94.9, + 93.5, + 91.7, + 90.4, + 88, + 86], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "Z7100-2":{ + "length":45.36, + "braking":"Semelle fonte", + "Vmax":130, + "Vref":200, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"Z7100-2-0cm", + "Source-number-0cm":4, + "Source-spacing-0cm":13.2, + "Source-name-50cm":"Z7100-2-50cm", + "Source-number-50cm":4, + "Source-spacing-50cm":13.2, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 103.8, + 100.2, + 98.4, + 98, + 100, + 103.2, + 102.3, + 103.5, + 109.8, + 116.7, + 120.2, + 117.2, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 119.3, + 120.5, + 119.6, + 116.3, + 112.1, + 105.9], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "Z7100-4":{ + "length":90.72, + "braking":"Semelle fonte", + "Vmax":130, + "Vref":200, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"Z7100-4-0cm", + "Source-number-0cm":8, + "Source-spacing-0cm":12.2, + "Source-name-50cm":"Z7100-4-50cm", + "Source-number-50cm":8, + "Source-spacing-50cm":12.2, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 103.8, + 100.2, + 98.4, + 98, + 100, + 103.2, + 102.3, + 103.5, + 109.8, + 116.7, + 120.2, + 117.2, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 119.3, + 120.5, + 119.6, + 116.3, + 112.1, + 105.9], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "Z7300":{ + "length":50.2, + "braking":"Bogie Moteur : semelle fritteeBogie Porteur : disque", + "Vmax":160, + "Vref":200, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"Z7300-0cm", + "Source-number-0cm":4, + "Source-spacing-0cm":14.3, + "Source-name-50cm":"Z7300-50cm", + "Source-number-50cm":4, + "Source-spacing-50cm":14.3, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 103.8, + 100.2, + 98.4, + 98, + 100, + 103.2, + 102.3, + 103.5, + 109.8, + 116.7, + 120.2, + 117.2, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 119.3, + 120.5, + 119.6, + 116.3, + 112.1, + 105.9], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "Z8100":{ + "length":104.05, + "braking":"Semelle composite", + "Vmax":140, + "Vref":90, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"Z8100-0cm", + "Source-number-0cm":8, + "Source-spacing-0cm":13.8, + "Source-name-50cm":"Z8100-50cm", + "Source-number-50cm":8, + "Source-spacing-50cm":13.8, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 95.8, + 97.8, + 101, + 98.4, + 98.5, + 98.8, + 99.1, + 101.6, + 104.4, + 104.7, + 101.4, + 98.1, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 94.3, + 93.5, + 90.6, + 88.4, + 85.8, + 83.8], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "Z8800-FC":{ + "length":98.76, + "braking":"Bogie Moteur : semelle fritteeBogie Porteur : disque+ semelle composite", + "Vmax":140, + "Vref":120, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"Z8800-FC-0cm", + "Source-number-0cm":8, + "Source-spacing-0cm":13.1, + "Source-name-50cm":"Z8800-FC-50cm", + "Source-number-50cm":8, + "Source-spacing-50cm":13.1, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 98.1, + 97.3, + 96, + 94.6, + 93.2, + 94.9, + 97.7, + 100.8, + 100.5, + 105.3, + 105.1, + 101.8, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 100.8, + 99.8, + 99.1, + 99.9, + 98.2, + 95.6], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "U25500":{ + "length":36.678, + "braking":"Disque", + "Vmax":100, + "Vref":120, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"U25500-0cm", + "Source-number-0cm":4, + "Source-spacing-0cm":9.6, + "Source-name-50cm":"U25500-50cm", + "Source-number-50cm":4, + "Source-spacing-50cm":9.6, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 95.6, + 94.2, + 94.8, + 98.1, + 97, + 96.3, + 96.8, + 99.5, + 100.9, + 102.2, + 103, + 103.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 98.8, + 97.8, + 95.9, + 94.6, + 92.5, + 89.7], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "V2N":{ + "length":26.4, + "braking":"Disque", + "Vmax":160, + "Vref":160, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"V2N-0cm", + "Source-number-0cm":20, + "Source-spacing-0cm":20, + "Source-name-50cm":"V2N-50cm", + "Source-number-50cm":20, + "Source-spacing-50cm":20, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 100.1, + 98, + 95.6, + 98, + 99.9, + 102.1, + 101.5, + 101.9, + 105.6, + 108.5, + 108.3, + 105.5, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 104, + 105.2, + 104, + 103.5, + 100.1, + 96.5], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "VB2N":{ + "length":24.28, + "braking":"Disque + Semelle fonte", + "Vmax":120, + "Vref":120, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"VB2N-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":17.8, + "Source-name-50cm":"VB2N-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":17.8, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 100.3, + 101.3, + 101.7, + 99.9, + 100.9, + 102.2, + 105, + 108.4, + 109.6, + 110.8, + 112.3, + 110.6, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 108.1, + 106.5, + 103.1, + 102.4, + 100.2, + 97.7], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "VO2N-VR2N":{ + "length":24.78, + "braking":"Disque + semelle fonte", + "Vmax":140, + "Vref":120, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"VO2N-VR2N-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":18.3, + "Source-name-50cm":"VO2N-VR2N-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":18.3, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 100.3, + 101.3, + 101.7, + 99.9, + 100.9, + 102.2, + 105, + 108.4, + 109.6, + 110.8, + 112.3, + 110.6, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 108.1, + 106.5, + 103.1, + 102.4, + 100.2, + 97.7], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "CORAIL-FC":{ + "length":26.4, + "braking":"Semelle composite", + "Vmax":200, + "Vref":200, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"CORAIL-FC-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":19, + "Source-name-50cm":"CORAIL-FC-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":19, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 100.1, + 98, + 95.6, + 98, + 99.9, + 102.1, + 101.5, + 101.9, + 105.6, + 108.5, + 108.3, + 105.5, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 104, + 105.2, + 104, + 103.5, + 100.1, + 96.5], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "Corail-FF":{ + "length":26.4, + "braking":"Semelle fonte", + "Vmax":200, + "Vref":200, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"Corail-FF-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":19, + "Source-name-50cm":"Corail-FF-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":19, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 103.8, + 100.2, + 98.4, + 98, + 100, + 103.2, + 102.3, + 103.5, + 109.8, + 116.7, + 120.2, + 117.2, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 119.3, + 120.5, + 119.6, + 116.3, + 112.1, + 105.9], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "RIB-RIO-RRR":{ + "length":99, + "braking":"Disque + semelle frittee ou composite", + "Vmax":140, + "Vref":120, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"RIB-RIO-RRR-0cm", + "Source-number-0cm":8, + "Source-spacing-0cm":12.9, + "Source-name-50cm":"RIB-RIO-RRR-50cm", + "Source-number-50cm":8, + "Source-spacing-50cm":12.9, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 97.9, + 94.4, + 94.2, + 94.2, + 94.2, + 93, + 95.6, + 99.4, + 104.3, + 106.5, + 105.3, + 102.5, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 99.2, + 98, + 95.8, + 94.5, + 92.8, + 90.9], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "Wagon-plat-FC":{ + "length":17, + "braking":"Semelle composite", + "Vmax":120, + "Vref":100, + "Screen-box-reflexion":0, + "Source":{ + "Source-name-0cm":"Wagon-plat-FC-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":9.6, + "Source-name-50cm":"Wagon-plat-FC-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":9.6, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 95.6, + 90.8, + 90.2, + 92.1, + 94.6, + 96.3, + 95.9, + 96, + 96.7, + 99.6, + 100.7, + 99.1, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 100.1, + 98.5, + 98.5, + 98.6, + 96.5, + 92.4], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "Wagon-plat-FF":{ + "length":17, + "braking":"Semelle fonte", + "Vmax":120, + "Vref":100, + "Screen-box-reflexion":0, + "Source":{ + "Source-name-0cm":"Wagon-plat-FF-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":9.6, + "Source-name-50cm":"Wagon-plat-FF-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":9.6, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 94.4, + 93.4, + 93.7, + 94.5, + 95, + 95.9, + 98.4, + 102.2, + 106.6, + 111.6, + 112.9, + 107.5, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 107, + 107.1, + 104.3, + 101.9, + 98.7, + 94.6], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "Wagon-FC":{ + "length":17, + "braking":"Semelle composite", + "Vmax":120, + "Vref":100, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"Wagon-FC-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":9.6, + "Source-name-50cm":"Wagon-FC-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":9.6, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 95.6, + 90.8, + 90.2, + 92.1, + 94.6, + 96.3, + 95.9, + 96, + 96.7, + 99.6, + 100.7, + 99.1, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 100.1, + 98.5, + 98.5, + 98.6, + 96.5, + 92.4], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000 + ] + }, + "Wagon-FF":{ + "length":17, + "braking":"Semelle fonte", + "Vmax":120, + "Vref":100, + "Screen-box-reflexion":1, + "Source":{ + "Source-name-0cm":"Wagon-FF-0cm", + "Source-number-0cm":2, + "Source-spacing-0cm":9.6, + "Source-name-50cm":"Wagon-FF-50cm", + "Source-number-50cm":2, + "Source-spacing-50cm":9.6, + "Speed-increment":30 + }, + "Spectrum0cm":[ + 94.4, + 93.4, + 93.7, + 94.5, + 95, + 95.9, + 98.4, + 102.2, + 106.6, + 111.6, + 112.9, + 107.5, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9], + "Spectrum50cm":[ + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + -99.9, + 107, + 107.1, + 104.3, + 101.9, + 98.7, + 94.6], + "frequency":[ + 100, + 125, + 200, + 250, + 315, + 400, + 500, + 630, + 800, + 1000, + 1250, + 1600, + 2000, + 2500, + 3150, + 4000, + 5000] + } +} diff --git a/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/coefficients_Road_Cnossos_2015.json b/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/road/cnossos/RoadCnossos_2015.json similarity index 96% rename from noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/coefficients_Road_Cnossos_2015.json rename to noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/road/cnossos/RoadCnossos_2015.json index 16f51e56e..a7811b5b8 100644 --- a/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/coefficients_Road_Cnossos_2015.json +++ b/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/road/cnossos/RoadCnossos_2015.json @@ -1,7 +1,7 @@ { "vehicles": { "1": { - "_comment": " Update in 08/2019 https://www.rivm.nl/bibliotheek/rapporten/2019-0023.pdf", + "_comment": "This is the 2015 version coefficients. An update was proposed in 08/2019 https://www.rivm.nl/bibliotheek/rapporten/2019-0023.pdf", "description": "passenger_cars", "frequency": [ 63, @@ -433,7 +433,6 @@ } } }, - "DEF": { "description": "without correction", "vmin": 30, @@ -529,7 +528,6 @@ } } }, - "FR_R2": { "description": "R2 non drainant(ajustement composante totale, Rapport Cerema 2016)", "vmin": 30, @@ -625,9 +623,6 @@ } } }, - - - "NL02": { "description": "2-layer ZOAB", "vmin": 50, @@ -1878,84 +1873,84 @@ 8000 ], "ref": { - "1": { - "ßm": -2.9, - "spectrum": [ - 13.9, - 14, - 14.1, - 8.7, - -2.5, - -3.9, - -0.5, - 2.9 - ] - }, - "2": { - "ßm": -0.1, - "spectrum": [ - 23.3, - 19.4, - 15.5, - 10.7, - 5.8, - 7.6, - 8.2, - 8.9 - ] - }, - "3": { - "ßm": 6.6, - "spectrum": [ - 19, - 15.5, - 12, - 5.8, - 1.5, - 3.3, - 4.0, - 4.8 - ] - }, - "4a": { - "ßm": 0, - "spectrum": [ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ] - }, - "4b": { - "ßm": 0, - "spectrum": [ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ] - }, - "5": { - "ßm": 0, - "spectrum": [ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ] - } + "1": { + "ßm": -2.9, + "spectrum": [ + 13.9, + 14, + 14.1, + 8.7, + -2.5, + -3.9, + -0.5, + 2.9 + ] + }, + "2": { + "ßm": -0.1, + "spectrum": [ + 23.3, + 19.4, + 15.5, + 10.7, + 5.8, + 7.6, + 8.2, + 8.9 + ] + }, + "3": { + "ßm": 6.6, + "spectrum": [ + 19, + 15.5, + 12, + 5.8, + 1.5, + 3.3, + 4.0, + 4.8 + ] + }, + "4a": { + "ßm": 0, + "spectrum": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ] + }, + "4b": { + "ßm": 0, + "spectrum": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ] + }, + "5": { + "ßm": 0, + "spectrum": [ + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ] + } } }, "FR1N": { diff --git a/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/coefficients_Road_Cnossos_2020.json b/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/road/cnossos/RoadCnossos_2020.json similarity index 99% rename from noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/coefficients_Road_Cnossos_2020.json rename to noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/road/cnossos/RoadCnossos_2020.json index 997a3f1c0..d16053edd 100644 --- a/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/coefficients_Road_Cnossos_2020.json +++ b/noisemodelling-emission/src/main/resources/org/noise_planet/noisemodelling/emission/road/cnossos/RoadCnossos_2020.json @@ -1,7 +1,7 @@ { "vehicles": { "1": { - "_comment": " Update in Directive 2015 - amendments 2019", + "_comment": " Updated Cnossos coefficients (amendments 2020)", "description": "passenger_cars", "frequency": [ 63, @@ -433,7 +433,6 @@ } } }, - "DEF": { "description": "without correction - Reference road surface", "vmin": 30, @@ -529,7 +528,6 @@ } } }, - "FR_R2": { "description": "R2 non drainant(ajustement composante totale, Rapport Cerema 2016)", "vmin": 30, @@ -625,7 +623,6 @@ } } }, - "NL02": { "description": "2-layer ZOAB", "vmin": 50, diff --git a/noisemodelling-emission/src/test/java/org/noise_planet/noisemodelling/emission/DiscreteDirectionAttributesTest.java b/noisemodelling-emission/src/test/java/org/noise_planet/noisemodelling/emission/DiscreteDirectionAttributesTest.java deleted file mode 100644 index 0499a656a..000000000 --- a/noisemodelling-emission/src/test/java/org/noise_planet/noisemodelling/emission/DiscreteDirectionAttributesTest.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.noise_planet.noisemodelling.emission; - -import org.junit.Test; - -import static org.junit.Assert.*; - -public class DiscreteDirectionAttributesTest { - final static double[] freqTest = new double[] {125, 250, 500, 1000, 2000, 4000, 8000, 16000}; - - @Test - public void testInsert() { - DiscreteDirectionAttributes d = new DiscreteDirectionAttributes(1, freqTest); - - RailWayLW.TrainAttenuation att = new RailWayLW.TrainAttenuation(RailWayLW.TrainNoiseSource.TRACTIONB); - - for(int yaw = 0; yaw < 360; yaw += 5) { - float phi = (float)Math.toRadians(yaw); - for(int pitch = -85; pitch < 90; pitch += 5) { - float theta = (float)Math.toRadians(pitch); - double[] attSpectrum = new double[freqTest.length]; - for (int idFreq = 0; idFreq < freqTest.length; idFreq++) { - attSpectrum[idFreq] = att.getAttenuation(freqTest[idFreq], phi, theta); - } - d.addDirectivityRecord(theta, phi, - attSpectrum); - } - } - - // test nearest neighbors - - assertEquals(new DiscreteDirectionAttributes.DirectivityRecord((float)Math.toRadians(30), - (float)Math.toRadians(25), null), - d.getRecord((float)Math.toRadians(31), (float)Math.toRadians(26), 0)); - - assertEquals(new DiscreteDirectionAttributes.DirectivityRecord((float)Math.toRadians(85), - (float)Math.toRadians(0), null), - d.getRecord((float)Math.toRadians(88), (float)Math.toRadians(358), 0)); - - assertEquals(new DiscreteDirectionAttributes.DirectivityRecord((float)Math.toRadians(-85), - (float)Math.toRadians(0), null), - d.getRecord((float)Math.toRadians(-89), (float)Math.toRadians(2), 0)); - - - // Test bilinear interpolation - DiscreteDirectionAttributes.DirectivityRecord r = d.getRecord((float)Math.toRadians(26), - (float)Math.toRadians(31), 1); - assertEquals(new DiscreteDirectionAttributes.DirectivityRecord((float)Math.toRadians(26), - (float)Math.toRadians(31), null), r); - assertArrayEquals(new double[]{-5.63, -5.63, -5.63, -5.63, -5.63, -5.63, -5.63, -5.63}, r.getAttenuation(), - 0.1); - - - assertEquals(-5.63, d.getAttenuation(freqTest[0], (float)Math.toRadians(31), - (float)Math.toRadians(26)),0.1); - assertEquals(-5.63, d.getAttenuation(freqTest[1], (float)Math.toRadians(31), - (float)Math.toRadians(26)),0.1); - assertEquals(-5.63, d.getAttenuation(freqTest[1] + 1, (float)Math.toRadians(31), - (float)Math.toRadians(26)),0.1); - assertEquals(-5.63, d.getAttenuation(freqTest[0] - 1, (float)Math.toRadians(31), - (float)Math.toRadians(26)),0.1); - assertEquals(-5.63, d.getAttenuation(freqTest[freqTest.length - 1] + 1, (float)Math.toRadians(31), - (float)Math.toRadians(26)),0.1); - } - -} \ No newline at end of file diff --git a/noisemodelling-emission/src/test/java/org/noise_planet/noisemodelling/emission/EvaluateRailWaySourceCNOSSOSTest.java b/noisemodelling-emission/src/test/java/org/noise_planet/noisemodelling/emission/EvaluateRailWaySourceCNOSSOSTest.java deleted file mode 100644 index 6fb6400d2..000000000 --- a/noisemodelling-emission/src/test/java/org/noise_planet/noisemodelling/emission/EvaluateRailWaySourceCNOSSOSTest.java +++ /dev/null @@ -1,1065 +0,0 @@ -/** - * NoiseModelling is an open-source tool designed to produce environmental noise maps on very large urban areas. It can be used as a Java library or be controlled through a user friendly web interface. - * - * This version is developed by the DECIDE team from the Lab-STICC (CNRS) and by the Mixt Research Unit in Environmental Acoustics (Université Gustave Eiffel). - * - * - * NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. - * - * Contact: contact@noise-planet.org - * - */ - -package org.noise_planet.noisemodelling.emission; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -/** - * Railway noise evaluation from Cnossos reference : COMMISSION DIRECTIVE (EU) 2015/996 - * of 19 May 2015 establishing common noise assessment methods according to Directive 2002/49/EC - * of the European Parliament and of the Council - * - * amending, for the purposes of adapting to scientific and technical progress, Annex II to - * Directive 2002/49/EC of the European Parliament and of the Council as regards - * common noise assessment methods - * - * part 2.3. Railway noise - * - * Return the dB value corresponding to the parameters - * @author Adrien Le Bellec - univ Gustave eiffel - * @author Olivier Chiello, Univ Gustave Eiffel - */ - -public class EvaluateRailWaySourceCNOSSOSTest { - private static final double EPSILON_TEST1 = 0.0001; - EvaluateRailwaySourceCnossos evaluateRailwaySourceCnossos = new EvaluateRailwaySourceCnossos(); - - @Test(expected = IllegalArgumentException.class) - public void testUnknownVehicle() { - evaluateRailwaySourceCnossos.setEvaluateRailwaySourceCnossos(EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Vehicles_SNCF_2015.json"), EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Train_SNCF_2021.json")); - String vehCat = "notsupported"; - - double vehicleSpeed = 80; - int rollingCondition = 0; - double idlingTime = 0; - - int nTracks = 2; - int trackTransfer = 7; - int railRoughness = 3; - int impactNoise = 1; - int bridgeTransfert = 0; - int curvature = 0; - boolean isTunnel = false; - - double vMaxInfra = 160; - double vehicleCommercial = 120; - - double vehiclePerHour = (1000 * vehicleSpeed); //for one vehicle - - RailwayVehicleParametersCnossos vehicleParameters = new RailwayVehicleParametersCnossos(vehCat, vehicleSpeed, vehiclePerHour, rollingCondition, idlingTime); - vehicleParameters.setSpectreVer(1); - RailwayTrackParametersCnossos trackParameters = new RailwayTrackParametersCnossos(vMaxInfra, trackTransfer, railRoughness, - impactNoise, bridgeTransfert, curvature, vehicleCommercial, isTunnel, nTracks); - - evaluateRailwaySourceCnossos.evaluate(vehicleParameters, trackParameters); - } - - @Test - public void Test_Cnossos_Rail_emission_section_1() { - - evaluateRailwaySourceCnossos.setEvaluateRailwaySourceCnossos(EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Vehicles_SNCF_2015.json"), EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Train_SNCF_2021.json")); - - String vehCat = "SNCF-BB66400"; - - double vehicleSpeed = 80; - int rollingCondition = 0; - double idlingTime = 0; - - int nTracks=2; - int trackTransfer = 7; - int railRoughness = 3; - int impactNoise = 1; - int bridgeTransfert = 0; - int curvature = 0; - boolean isTunnel = false; - - double vMaxInfra = 160; - double vehicleCommercial= 120; - - double vehiclePerHour = (1000*vehicleSpeed); //for one vehicle - - double[] expectedValuesLWRolling = new double[]{98.6704,99.6343,101.5298,102.8865,100.3316,99.6011,100.4072,105.7262,107.2207,108.4848,109.4223,110.1035,111.8706,111.4956,108.5828,104.2152,106.5525,105.2982,103.1594,100.7729,101.1764,100.6417,100.6287,102.1869}; - double[] expectedValuesLWTractionA = new double[]{98.8613,94.7613,92.5613,94.5613,92.7613,92.7613,92.9613,94.7613,94.5613,95.6613,95.5613,98.5613,95.1613,95.0613,95.0613,94.0613,94.0613,99.3613,92.4613,89.4613,86.9613,84.0613,81.4613,79.1613}; - double[] expectedValuesLWTractionB = new double[]{103.1613,99.9613,95.4613,93.9613,93.2613,93.5613,92.8613,92.6613,92.3613,92.7613,92.7613,96.7613,92.6613,92.9613,92.8613,93.0613,93.1613,98.2613,91.4613,88.6613,85.9613,83.3613,80.8613,78.6613}; - double[] expectedValuesLWAerodynamicA = new double[]{-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99}; - double[] expectedValuesLWAerodynamicB = new double[]{-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99}; - double[] expectedValuesLWBridge = new double[]{-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99,-99}; - - RailwayVehicleParametersCnossos vehicleParameters = new RailwayVehicleParametersCnossos(vehCat, vehicleSpeed,vehiclePerHour, rollingCondition,idlingTime); - vehicleParameters.setSpectreVer(1); - RailwayTrackParametersCnossos trackParameters = new RailwayTrackParametersCnossos(vMaxInfra, trackTransfer, railRoughness, - impactNoise, bridgeTransfert, curvature, vehicleCommercial,isTunnel, nTracks); - RailWayLW lWRailWay = evaluateRailwaySourceCnossos.evaluate(vehicleParameters, trackParameters); - - for (int idFreq = 0; idFreq < 24; idFreq++) { - assertEquals(expectedValuesLWRolling[idFreq], lWRailWay.getLWRolling()[idFreq], EPSILON_TEST1); - assertEquals(expectedValuesLWTractionA[idFreq], lWRailWay.getLWTractionA()[idFreq], EPSILON_TEST1); - assertEquals(expectedValuesLWTractionB[idFreq], lWRailWay.getLWTractionB()[idFreq], EPSILON_TEST1); - assertEquals(expectedValuesLWAerodynamicA[idFreq], lWRailWay.getLWAerodynamicA()[idFreq], EPSILON_TEST1); - assertEquals(expectedValuesLWAerodynamicB[idFreq], lWRailWay.getLWAerodynamicB()[idFreq], EPSILON_TEST1); - assertEquals(expectedValuesLWBridge[idFreq], lWRailWay.getLWBridge()[idFreq], EPSILON_TEST1); - - } - } - - @Test - public void Test_Cnossos_Rail_emission_section_2() { - - evaluateRailwaySourceCnossos.setEvaluateRailwaySourceCnossos(EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Vehicles_SNCF_2015.json"), EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Train_SNCF_2021.json")); - - String vehCat = "SNCF-BB66400"; - - double vehicleSpeed = 80; - int rollingCondition = 0; - double idlingTime = 0; - - int nTracks=2; - int trackTransfer = 7; - int railRoughness = 3; - int impactNoise = 3; - int bridgeTransfert = 0; - int curvature = 0; - boolean isTunnel = false; - - double vMaxInfra = 160; - double vehicleCommercial= 120; - - double vehiclePerHour = (1000*vehicleSpeed); //for one vehicle - - RailWayLW lWRailWay = null; - - double[] expectedValuesLWRolling = new double[]{100.8970,101.8434,104.6603,107.0239,104.6611,104.0827,105.2341,109.9994,110.1740,110.1183,110.2914,110.7347,112.4299,111.8073,108.7535,104.3038,106.6040,105.3350,103.1827,100.7862,101.1828,100.6431,100.6290,102.1868}; - RailwayVehicleParametersCnossos vehicleParameters = new RailwayVehicleParametersCnossos(vehCat, vehicleSpeed,vehiclePerHour, rollingCondition,idlingTime); - vehicleParameters.setSpectreVer(1); - - RailwayTrackParametersCnossos trackParameters = new RailwayTrackParametersCnossos(vMaxInfra, trackTransfer, railRoughness, - impactNoise, bridgeTransfert, curvature, vehicleCommercial,isTunnel, nTracks); - lWRailWay = evaluateRailwaySourceCnossos.evaluate(vehicleParameters, trackParameters); - - for (int idFreq = 0; idFreq < 24; idFreq++) { - assertEquals(expectedValuesLWRolling[idFreq], lWRailWay.getLWRolling()[idFreq], EPSILON_TEST1); - } - } - - @Test - public void Test_Cnossos_Rail_emission_section_3() { - - evaluateRailwaySourceCnossos.setEvaluateRailwaySourceCnossos(EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Vehicles_SNCF_2015.json"), EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Train_SNCF_2021.json")); - - - String vehCat = "SNCF-BB66400"; - - double vehicleSpeed = 80; - int rollingCondition = 0; - double idlingTime = 0; - - int nTracks=4; - int trackTransfer = 7; - int railRoughness = 3; - int impactNoise = 1; - int bridgeTransfert = 3; - int curvature = 0; - boolean isTunnel = false; - - double vMaxInfra = 160; - double vehicleCommercial= 120; - - RailWayLW lWRailWay = null; - - double vehiclePerHour = (1000*vehicleSpeed); //for one vehicle - - double[] expectedValuesLWRolling = new double[]{98.6704,99.6343,101.5298,102.8865,100.3316,99.6011,100.4072,105.7262,107.2207,108.4848,109.4223,110.1035,111.8706,111.4956,108.5828,104.2152,106.5525,105.2982,103.1594,100.7729,101.1764,100.6417,100.6287,102.1869}; - double[] expectedValuesLWBridge = new double[]{108.4579,109.4015,111.344,112.4959,111.1415,110.9017,105.8236,109.7833,111.592,115.0733,116.7548,116.8658,117.8667,116.2709,113.2686,102.3774,96.9285,95.8390,85.6001,75.2583,70.6990,62.9177,57.9386,54.5294}; - - RailwayVehicleParametersCnossos vehicleParameters = new RailwayVehicleParametersCnossos(vehCat, vehicleSpeed,vehiclePerHour, rollingCondition,idlingTime); - vehicleParameters.setSpectreVer(1); - - RailwayTrackParametersCnossos trackParameters = new RailwayTrackParametersCnossos(vMaxInfra, trackTransfer, railRoughness, - impactNoise, bridgeTransfert, curvature, vehicleCommercial,isTunnel, nTracks); - lWRailWay = evaluateRailwaySourceCnossos.evaluate(vehicleParameters, trackParameters); - - for (int idFreq = 0; idFreq < 24; idFreq++) { - assertEquals(expectedValuesLWRolling[idFreq], lWRailWay.getLWRolling()[idFreq], EPSILON_TEST1); - assertEquals(expectedValuesLWBridge[idFreq], lWRailWay.getLWBridge()[idFreq], EPSILON_TEST1); - } - } - - - @Test - public void Test_Cnossos_Rail_emission_section_4 () { - - evaluateRailwaySourceCnossos.setEvaluateRailwaySourceCnossos(EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Vehicles_SNCF_2015.json"), EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Train_SNCF_2021.json")); - - - String vehCat = "SNCF-BB66400"; - - double vehicleSpeed = 200; - int rollingCondition = 0; - double idlingTime = 0; - - int nTracks = 2; - int trackTransfer = 9; - int railRoughness = 3; - int impactNoise = 1; - int bridgeTransfert = 0; - int curvature = 0; - boolean isTunnel = false; - - double vMaxInfra = 200; - double vehicleCommercial = 200; - - double vehiclePerHour = (1000*vehicleSpeed); //for one vehicle - - RailWayLW lWRailWay = null; - double[] expectedValuesLWRolling = new double[]{98.66110, 100.5681, 104.3908, 107.5565, 106.7391, 106.4557, 105.5468, 109.3204, 108.2763, 109.2614, 111.1101, 112.5186, 117.3340, 121.3800, 123.5189, 122.9000, 126.9115, 122.9414, 117.8516, 111.8003, 107.3142, 105.8263, 103.9313, 102.2640}; - double[] expectedValuesLWTractionA = new double[]{98.8613, 94.7613, 92.5613, 94.5613, 92.7613, 92.7613, 92.9613, 94.7613, 94.5613, 95.6613, 95.5613, 98.5613, 95.1613, 95.0613, 95.0613, 94.0613, 94.0613, 99.3613, 92.4613, 89.4613, 86.9613, 84.0613, 81.4613, 79.1613}; - double[] expectedValuesLWTractionB = new double[]{103.1613, 99.96130, 95.46130, 93.96130, 93.26130, 93.56130, 92.86130, 92.66130, 92.36130, 92.76130, 92.76130, 96.76130, 92.66130, 92.96130, 92.86130, 93.06130, 93.16130, 98.26130, 91.46130, 88.66130, 85.96130, 83.36130, 80.86130, 78.6613}; - double[] expectedValuesLWAerodynamicA = new double[]{103.7732, 104.3619, 106.8712, 108.5805, 106.4589, 106.1681, 106.0774, 107.5763, 107.0650, 107.4712, 107.3712, 106.3712, 106.9712, 106.8712, 106.8712, 105.8712, 105.8712, 106.1712, 105.7403, 104.2867, 103.2811, 101.8249, 100.7712, 100.0176}; - double[] expectedValuesLWAerodynamicB = new double[]{27.9057, 29.7057, 30.2057, 28.7057, 28.0057, 28.30570, 27.60570, 27.40570, 27.10570, 27.5057, 27.5057, 27.5057, 27.4057, 27.7057, 27.6057, 96.4057, 101.5057, 101.6057, 96.80570, 28.40570, 28.70570, 29.10570, 29.60570, 30.4057}; - double[] expectedValuesLWBridge = new double[]{-99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99}; - - - RailwayVehicleParametersCnossos vehicleParameters = new RailwayVehicleParametersCnossos(vehCat, vehicleSpeed,vehiclePerHour, rollingCondition,idlingTime); - vehicleParameters.setSpectreVer(1); - - RailwayTrackParametersCnossos trackParameters = new RailwayTrackParametersCnossos(vMaxInfra, trackTransfer, railRoughness, - impactNoise, bridgeTransfert, curvature, vehicleCommercial,isTunnel, nTracks); - lWRailWay = evaluateRailwaySourceCnossos.evaluate(vehicleParameters, trackParameters); - - for (int idFreq = 0; idFreq < 24; idFreq++) { - assertEquals(expectedValuesLWRolling[idFreq], lWRailWay.getLWRolling()[idFreq], EPSILON_TEST1); - assertEquals(expectedValuesLWTractionA[idFreq], lWRailWay.getLWTractionA()[idFreq], EPSILON_TEST1); - assertEquals(expectedValuesLWTractionB[idFreq], lWRailWay.getLWTractionB()[idFreq], EPSILON_TEST1); - assertEquals(expectedValuesLWAerodynamicA[idFreq], lWRailWay.getLWAerodynamicA()[idFreq], EPSILON_TEST1); - assertEquals(expectedValuesLWAerodynamicB[idFreq], lWRailWay.getLWAerodynamicB()[idFreq], EPSILON_TEST1); - assertEquals(expectedValuesLWBridge[idFreq], lWRailWay.getLWBridge()[idFreq], EPSILON_TEST1); - } - } - - @Test - public void Test_Cnossos_Rail_emission_section_5() { - - evaluateRailwaySourceCnossos.setEvaluateRailwaySourceCnossos(EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Vehicles_SNCF_2015.json"), EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Train_SNCF_2021.json")); - - - String vehCat; - double vehicleSpeed; - double tDay; - double tEvening; - double tNight; - - String vehCat1 = "SNCF-BB66400"; - double vehicleSpeed1 = 80; - double tDay1 = 0.4; - double tEvening1 = 0.3; - double tNight1 = 0.25; - double vehiclePerHour = tDay1; - - String vehCat2 = "RMR-Cat-1"; - double vehicleSpeed2 = 120; - double tDay2 = 0.5; - double tEvening2 = 0.5; - double tNight2 = 0.5; - - String vehCat3 = "RMR-Cat-9-a"; - double vehicleSpeed3 = 100; - double tDay3 = 0.2; - double tEvening3 = 0.3; - double tNight3 = 0.7; - - int rollingCondition = 0; - double idlingTime = 0; - - int nTracks = 2; - int trackTransfer = 7; - int railRoughness = 4; - int impactNoise = 1; - int bridgeTrasnfert = 0; - int curvature = 0; - boolean isTunnel = false; - - double vMaxInfra = 160; - double vehicleCommercial = 120; - - RailwayTrackParametersCnossos trackParameters = new RailwayTrackParametersCnossos(vMaxInfra, trackTransfer, railRoughness, - impactNoise, bridgeTrasnfert, curvature, vehicleCommercial, isTunnel, nTracks); - - double[] expectedValuesLWRolling; - double[] expectedValuesLWRolling1 = new double[]{97.1163,95.9284,97.6691,99.2991,97.1440,97.4508,99.2167,105.2093,107.0484,108.4798,109.5263,110.2781,112.0743,111.6404,108.6516,104.1867,106.4632,105.1549,102.952,100.4917,100.9441,100.4491,100.4702,102.0818}; - double[] expectedValuesLWRolling2 = new double[]{102.3819,101.3591,102.0322,102.2927,100.1769,99.86140,101.3709,104.9785,104.7817,105.1695,107.2118,111.4597,117.2867,118.8195,117.2068,114.3600,112.0048,109.4634,105.5892,104.2252,101.6110,100.1356,100.5837,100.3448}; - double[] expectedValuesLWRolling3 = new double[]{100.0997,98.93480,99.69780,100.8341,98.85870,98.98000,100.6952,104.5915,105.3080,106.4464,108.5190,111.5829,115.6512,115.9799,113.7622,110.2023,107.1972,105.9335,104.4154,102.0925,100.1482,100.1865,99.95900,100.3303}; - - for (int i = 1; i < 4; i++) { - switch (i) { - case 1: - vehCat = vehCat1; - vehicleSpeed = vehicleSpeed1; - tDay = tDay1; - tEvening = tEvening1; - tNight = tNight1; - vehiclePerHour = (1000*vehicleSpeed); - expectedValuesLWRolling = expectedValuesLWRolling1; - break; - case 2: - vehCat = vehCat2; - vehicleSpeed = vehicleSpeed2; - tDay = tDay2; - tEvening = tEvening2; - tNight = tNight2; - vehiclePerHour = (1000*vehicleSpeed); - expectedValuesLWRolling = expectedValuesLWRolling2; - break; - case 3: - vehCat = vehCat3; - vehicleSpeed = vehicleSpeed3; - tDay = tDay3; - tEvening = tEvening3; - tNight = tNight3; - vehiclePerHour = (int) (1000*vehicleSpeed); - expectedValuesLWRolling = expectedValuesLWRolling3; - break; - default: - vehCat = ""; - vehicleSpeed = 0; - tDay = 0; - tEvening = 0; - tNight = 0; - vehiclePerHour = (1000*vehicleSpeed); - expectedValuesLWRolling = new double[]{-99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99}; - } - - RailWayLW lWRailWay = null; - RailwayVehicleParametersCnossos vehicleParameters = new RailwayVehicleParametersCnossos(vehCat, vehicleSpeed,vehiclePerHour, rollingCondition,idlingTime); - vehicleParameters.setSpectreVer(1); - - lWRailWay = evaluateRailwaySourceCnossos.evaluate(vehicleParameters, trackParameters); - - - for (int idFreq = 0; idFreq < 24; idFreq++) { - assertEquals(expectedValuesLWRolling[idFreq], lWRailWay.getLWRolling()[idFreq], EPSILON_TEST1); - } - } - - } - - @Test - public void Test_Cnossos_Rail_emission_section_6() { - - evaluateRailwaySourceCnossos.setEvaluateRailwaySourceCnossos(EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Vehicles_SNCF_2021.json"), EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Train_SNCF_2021.json")); - - String vehCat = "SNCF2"; - - double vehicleSpeed = 80; - int rollingCondition = 0; - double idlingTime = 0; - - // Set : Take into account the number of units - double nBUnit = 2; - - int nTracks=2; - int trackTransfer = 5; - int railRoughness = 1; - int impactNoise = 0; - int bridgeTransfert = 0; - int curvature = 0; - boolean isTunnel = false; - - double vMaxInfra = 160; - double vehicleCommercial= 120; - - double tDay = 1; - double vehiclePerHour = (1000*vehicleSpeed); //for one vehicle - double deltaL0 = 10*Math.log10(vehiclePerHour*nTracks); - - double deltaTDay = 10*Math.log10(tDay)-deltaL0; - // - - - double[] expectedValuesLWRolling = new double[]{48.5606,49.5910,51.5763,56.4920,55.5831,55.4623,55.2207,56.4663,56.3912, - 56.7350,56.4837,59.9648,62.8745,62.6585,59.6990,57.3252,59.7649,61.1898,60.5615,58.7027,55.6686,49.3786,48.0600,45.9195}; - RailwayVehicleParametersCnossos vehicleParameters = new RailwayVehicleParametersCnossos(vehCat, vehicleSpeed,vehiclePerHour, rollingCondition,idlingTime); - vehicleParameters.setSpectreVer(2); - RailwayTrackParametersCnossos trackParameters = new RailwayTrackParametersCnossos(vMaxInfra, trackTransfer, railRoughness, - impactNoise, bridgeTransfert, curvature, vehicleCommercial,isTunnel, nTracks); - RailWayLW lWRailWay = evaluateRailwaySourceCnossos.evaluate(vehicleParameters, trackParameters); - - for (int idFreq = 0; idFreq < 24; idFreq++) { - // Compute sound powers per track meter - lWRailWay.getLWRolling()[idFreq] = 10*Math.log10(Math.pow(10,(lWRailWay.getLWRolling()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - assertEquals(expectedValuesLWRolling[idFreq], lWRailWay.getLWRolling()[idFreq] , EPSILON_TEST1); - } - } - - @Test - public void Test_Cnossos_Rail_emission_OC1() { - - evaluateRailwaySourceCnossos.setEvaluateRailwaySourceCnossos(EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Vehicles_SNCF_2021.json"), EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Train_SNCF_2021.json")); - - String vehCat = "SNCF2"; - double vehicleSpeed = 80; - int rollingCondition = 0; - double idlingTime = 0; - double nBUnit = 2; - double tDay = 1; - double tEvening = 1; - double tNight = 1; - - int nTracks=2; - int trackTransfer = 5; - int railRoughness = 1; - int impactNoise = 0; - int curvature = 0; - double vMaxInfra = 160; - double vehicleCommercial= 120; - boolean isTunnel = false; - int bridgeTransfert = 0; - - - // Compute deltaT - double vehiclePerHour = (1000*vehicleSpeed); //for one vehicle - double deltaL0 = 10*Math.log10(vehiclePerHour*nTracks); - double deltaTDay = 10*Math.log10(tDay)-deltaL0; - double deltaTEvening = 10*Math.log10(tEvening)-deltaL0; - double deltaTNight = 10*Math.log10(tNight)-deltaL0; - - // Expected values - double[] expectedValuesLWRollingD = new double[]{48.5605583070706,49.591094876553,51.5763357483898,56.4920337262433,55.5830577481227,55.4623526520535,55.2207102517505,56.4663370258577,56.3912193484322,56.7349538148708,56.4837006351883,59.9647735129824,62.8744986704598,62.6584506699844,59.6990085689524,57.3251971450722,59.7649235057108,61.1897948776294,60.5615433617675,58.7027221858109,55.6685855421802,49.378644576175,48.0600152459358,45.9195251325526}; - double[] expectedValuesLWRollingE = new double[]{48.5605583070706,49.591094876553,51.5763357483898,56.4920337262433,55.5830577481227,55.4623526520535,55.2207102517505,56.4663370258577,56.3912193484322,56.7349538148708,56.4837006351883,59.9647735129824,62.8744986704598,62.6584506699844,59.6990085689524,57.3251971450722,59.7649235057108,61.1897948776294,60.5615433617675,58.7027221858109,55.6685855421802,49.378644576175,48.0600152459358,45.9195251325526}; - double[] expectedValuesLWRollingN = new double[]{48.5605583070706,49.591094876553,51.5763357483898,56.4920337262433,55.5830577481227,55.4623526520535,55.2207102517505,56.4663370258577,56.3912193484322,56.7349538148708,56.4837006351883,59.9647735129824,62.8744986704598,62.6584506699844,59.6990085689524,57.3251971450722,59.7649235057108,61.1897948776294,60.5615433617675,58.7027221858109,55.6685855421802,49.378644576175,48.0600152459358,45.9195251325526}; - - double[] expectedValuesLW_Traction_A_D = new double[]{49.8691001300806,49.7691001300806,49.6691001300806,50.1691001300806,47.0691001300806,54.1691001300806,50.7691001300806,44.2691001300806,46.8691001300806,47.0691001300806,45.6691001300806,44.9691001300806,43.4691001300806,44.5691001300806,41.5691001300806,41.1691001300806,38.9691001300806,37.3691001300806,36.4691001300806,35.3691001300806,31.7691001300806,27.6691001300806,22.4691001300806,20.4691001300806}; - double[] expectedValuesLW_Traction_A_E = new double[]{49.8691001300806,49.7691001300806,49.6691001300806,50.1691001300806,47.0691001300806,54.1691001300806,50.7691001300806,44.2691001300806,46.8691001300806,47.0691001300806,45.6691001300806,44.9691001300806,43.4691001300806,44.5691001300806,41.5691001300806,41.1691001300806,38.9691001300806,37.3691001300806,36.4691001300806,35.3691001300806,31.7691001300806,27.6691001300806,22.4691001300806,20.4691001300806}; - double[] expectedValuesLW_Traction_A_N = new double[]{49.8691001300806,49.7691001300806,49.6691001300806,50.1691001300806,47.0691001300806,54.1691001300806,50.7691001300806,44.2691001300806,46.8691001300806,47.0691001300806,45.6691001300806,44.9691001300806,43.4691001300806,44.5691001300806,41.5691001300806,41.1691001300806,38.9691001300806,37.3691001300806,36.4691001300806,35.3691001300806,31.7691001300806,27.6691001300806,22.4691001300806,20.4691001300806}; - - double[] expectedValuesL_Traction_B_D = new double[]{-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572}; - double[] expectedValuesL_Traction_B_E = new double[]{-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572}; - double[] expectedValuesL_Traction_B_N = new double[]{-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572}; - - // Compute - RailwayVehicleParametersCnossos vehicleParameters = new RailwayVehicleParametersCnossos(vehCat, vehicleSpeed,vehiclePerHour, rollingCondition,idlingTime); - vehicleParameters.setSpectreVer(2); - RailwayTrackParametersCnossos trackParameters = new RailwayTrackParametersCnossos(vMaxInfra, trackTransfer, railRoughness, - impactNoise, bridgeTransfert, curvature, vehicleCommercial,isTunnel, nTracks); - RailWayLW lWRailWay = evaluateRailwaySourceCnossos.evaluate(vehicleParameters, trackParameters); - - for (int idFreq = 0; idFreq < 24; idFreq++) { - - //Day - double rolling = 10*Math.log10(Math.pow(10,(lWRailWay.getLWRolling()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - double tractionA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - double tractionB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - double aeroA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - double aeroB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - assertEquals(expectedValuesLWRollingD[idFreq], rolling , EPSILON_TEST1); - assertEquals(expectedValuesLW_Traction_A_D[idFreq], tractionA , EPSILON_TEST1); - assertEquals(expectedValuesL_Traction_B_D[idFreq], tractionB , EPSILON_TEST1); - - //Evening - rolling = 10*Math.log10(Math.pow(10,(lWRailWay.getLWRolling()[idFreq]+10 * Math.log10(nBUnit)+deltaTEvening)/10)); - tractionA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit)+deltaTEvening)/10)); - tractionB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit)+deltaTEvening)/10)); - aeroA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit)+deltaTEvening)/10)); - aeroB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit)+deltaTEvening)/10)); - assertEquals(expectedValuesLWRollingE[idFreq], rolling , EPSILON_TEST1); - assertEquals(expectedValuesLW_Traction_A_E[idFreq], tractionA, EPSILON_TEST1); - assertEquals(expectedValuesL_Traction_B_E[idFreq], tractionB , EPSILON_TEST1); - - //Night - rolling = 10*Math.log10(Math.pow(10,(lWRailWay.getLWRolling()[idFreq]+10 * Math.log10(nBUnit)+deltaTNight)/10)); - tractionA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit)+deltaTNight)/10)); - tractionB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit)+deltaTNight)/10)); - aeroA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit)+deltaTNight)/10)); - aeroB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit)+deltaTNight)/10)); - assertEquals(expectedValuesLWRollingN[idFreq], rolling, EPSILON_TEST1); - assertEquals(expectedValuesLW_Traction_A_N[idFreq], tractionA , EPSILON_TEST1); - assertEquals(expectedValuesL_Traction_B_N[idFreq], tractionB , EPSILON_TEST1); - } - } - - @Test - public void Test_Cnossos_Rail_emission_OC2() { - - evaluateRailwaySourceCnossos.setEvaluateRailwaySourceCnossos(EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Vehicles_SNCF_2021.json"), EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Train_SNCF_2021.json")); - - String vehCat = "SNCF2"; - double vehicleSpeed = 80; - int rollingCondition = 0; - double idlingTime = 0; - double nBUnit = 2; - double tDay = 1; - double tEvening = 1; - double tNight = 1; - - int nTracks=2; - int trackTransfer = 7; - int railRoughness = 2; - int impactNoise = 1; - int curvature = 0; - double vMaxInfra = 160; - double vehicleCommercial= 120; - boolean isTunnel = false; - int bridgeTransfert = 0; - - // Compute deltaT - double vehiclePerHour = (1000*vehicleSpeed); //for one vehicle - double deltaL0 = 10*Math.log10(vehiclePerHour*nTracks); - double deltaTDay = 10*Math.log10(tDay)-deltaL0; - double deltaTEvening = 10*Math.log10(tEvening)-deltaL0; - double deltaTNight = 10*Math.log10(tNight)-deltaL0; - - // Expected values - double[] expectedValuesLWRollingD = new double[]{43.8903627967019,44.9655697489009,48.9478577301374,55.5479496503529,55.435644216131,56.2891894988337,57.7651753624208,59.8571890905986,60.9673183839427,61.9895897144138,61.6677155247581,64.860508108409,67.7908958462555,65.626269983869,62.1831439289956,59.579681366753,61.0864098301681,62.2076187832561,61.491437018795,59.6104246527745,56.5374755835627,50.4190128973858,49.0315804220768,46.7955035486733}; - double[] expectedValuesLWRollingE = new double[]{43.8903627967019,44.9655697489009,48.9478577301374,55.5479496503529,55.435644216131,56.2891894988337,57.7651753624208,59.8571890905986,60.9673183839427,61.9895897144138,61.6677155247581,64.860508108409,67.7908958462555,65.626269983869,62.1831439289956,59.579681366753,61.0864098301681,62.2076187832561,61.491437018795,59.6104246527745,56.5374755835627,50.4190128973858,49.0315804220768,46.7955035486733}; - double[] expectedValuesLWRollingN = new double[]{43.8903627967019,44.9655697489009,48.9478577301374,55.5479496503529,55.435644216131,56.2891894988337,57.7651753624208,59.8571890905986,60.9673183839427,61.9895897144138,61.6677155247581,64.860508108409,67.7908958462555,65.626269983869,62.1831439289956,59.579681366753,61.0864098301681,62.2076187832561,61.491437018795,59.6104246527745,56.5374755835627,50.4190128973858,49.0315804220768,46.7955035486733}; - - double[] expectedValuesLW_Traction_A_D = new double[]{49.8691001300806,49.7691001300806,49.6691001300806,50.1691001300806,47.0691001300806,54.1691001300806,50.7691001300806,44.2691001300806,46.8691001300806,47.0691001300806,45.6691001300806,44.9691001300806,43.4691001300806,44.5691001300806,41.5691001300806,41.1691001300806,38.9691001300806,37.3691001300806,36.4691001300806,35.3691001300806,31.7691001300806,27.6691001300806,22.4691001300806,20.4691001300806}; - double[] expectedValuesLW_Traction_A_E = new double[]{49.8691001300806,49.7691001300806,49.6691001300806,50.1691001300806,47.0691001300806,54.1691001300806,50.7691001300806,44.2691001300806,46.8691001300806,47.0691001300806,45.6691001300806,44.9691001300806,43.4691001300806,44.5691001300806,41.5691001300806,41.1691001300806,38.9691001300806,37.3691001300806,36.4691001300806,35.3691001300806,31.7691001300806,27.6691001300806,22.4691001300806,20.4691001300806}; - double[] expectedValuesLW_Traction_A_N = new double[]{49.8691001300806,49.7691001300806,49.6691001300806,50.1691001300806,47.0691001300806,54.1691001300806,50.7691001300806,44.2691001300806,46.8691001300806,47.0691001300806,45.6691001300806,44.9691001300806,43.4691001300806,44.5691001300806,41.5691001300806,41.1691001300806,38.9691001300806,37.3691001300806,36.4691001300806,35.3691001300806,31.7691001300806,27.6691001300806,22.4691001300806,20.4691001300806}; - - double[] expectedValuesL_Traction_B_D = new double[]{-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572}; - double[] expectedValuesL_Traction_B_E = new double[]{-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572}; - double[] expectedValuesL_Traction_B_N = new double[]{-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572,-39.030899869572}; - - // Compute - RailwayVehicleParametersCnossos vehicleParameters = new RailwayVehicleParametersCnossos(vehCat, vehicleSpeed,vehiclePerHour, rollingCondition,idlingTime); - vehicleParameters.setSpectreVer(2); - RailwayTrackParametersCnossos trackParameters = new RailwayTrackParametersCnossos(vMaxInfra, trackTransfer, railRoughness, - impactNoise, bridgeTransfert, curvature, vehicleCommercial,isTunnel, nTracks); - RailWayLW lWRailWay = evaluateRailwaySourceCnossos.evaluate(vehicleParameters, trackParameters); - - for (int idFreq = 0; idFreq < 24; idFreq++) { - - //Day - double rolling = 10*Math.log10(Math.pow(10,(lWRailWay.getLWRolling()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - double tractionA= 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - double tractionB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - double aeroA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - double aeroB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - assertEquals(expectedValuesLWRollingD[idFreq], rolling, EPSILON_TEST1); - assertEquals(expectedValuesLW_Traction_A_D[idFreq], tractionA , EPSILON_TEST1); - assertEquals(expectedValuesL_Traction_B_D[idFreq], tractionB , EPSILON_TEST1); - - //Evening - rolling = 10*Math.log10(Math.pow(10,(lWRailWay.getLWRolling()[idFreq]+10 * Math.log10(nBUnit)+deltaTEvening)/10)); - tractionA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit)+deltaTEvening)/10)); - tractionB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit)+deltaTEvening)/10)); - aeroA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit)+deltaTEvening)/10)); - aeroB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit)+deltaTEvening)/10)); - assertEquals(expectedValuesLWRollingE[idFreq], rolling , EPSILON_TEST1); - assertEquals(expectedValuesLW_Traction_A_E[idFreq], tractionA, EPSILON_TEST1); - assertEquals(expectedValuesL_Traction_B_E[idFreq], tractionB , EPSILON_TEST1); - - //Night - rolling = 10*Math.log10(Math.pow(10,(lWRailWay.getLWRolling()[idFreq]+10 * Math.log10(nBUnit)+deltaTNight)/10)); - tractionA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit)+deltaTNight)/10)); - tractionB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit)+deltaTNight)/10)); - aeroA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit)+deltaTNight)/10)); - aeroB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit)+deltaTNight)/10)); - assertEquals(expectedValuesLWRollingN[idFreq], rolling , EPSILON_TEST1); - assertEquals(expectedValuesLW_Traction_A_N[idFreq], tractionA , EPSILON_TEST1); - assertEquals(expectedValuesL_Traction_B_N[idFreq], tractionB , EPSILON_TEST1); - - } - } - - @Test - public void Test_Cnossos_Rail_emission_OC3() { - - evaluateRailwaySourceCnossos.setEvaluateRailwaySourceCnossos(EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Vehicles_SNCF_2021.json"), EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Train_SNCF_2021.json")); - - String vehCat = "SNCF2"; - double vehicleSpeed = 80; - int rollingCondition = 0; - double idlingTime = 0; - double nBUnit = 2; - double tDay = 1; - double tEvening = 1; - double tNight = 1; - - int nTracks=4; - int trackTransfer = 8; - int railRoughness = 2; - int impactNoise = 0; - int curvature = 0; - double vMaxInfra = 160; - double vehicleCommercial= 120; - boolean isTunnel = false; - int bridgeTransfert = 0; - - // Compute deltaT - double vehiclePerHour = (1000*vehicleSpeed); //for one vehicle - double deltaL0 = 10*Math.log10(vehiclePerHour*nTracks); - double deltaTDay = 10*Math.log10(tDay)-deltaL0; - double deltaTEvening = 10*Math.log10(tEvening)-deltaL0; - double deltaTNight = 10*Math.log10(tNight)-deltaL0; - - // Expected values - double[] expectedValuesLWRollingD = new double[]{59.3823815386426,59.7740042542256,61.6645074704619,66.5651015825184,64.9236256151963,63.9195646659437,63.0633891427656,63.1703959172873,62.0842218312365,61.5507094539991,59.9458124597247,62.0451549860138,63.5063034095735,61.62742572976,57.591356100339,54.8777141322954,57.2745023554145,58.7784762578773,58.2320686591241,56.3534564010822,53.2240832593016,46.6986552124813,45.4591519061876,43.3326357315674}; - double[] expectedValuesLWRollingE = new double[]{59.3823815386426,59.7740042542256,61.6645074704619,66.5651015825184,64.9236256151963,63.9195646659437,63.0633891427656,63.1703959172873,62.0842218312365,61.5507094539991,59.9458124597247,62.0451549860138,63.5063034095735,61.62742572976,57.591356100339,54.8777141322954,57.2745023554145,58.7784762578773,58.2320686591241,56.3534564010822,53.2240832593016,46.6986552124813,45.4591519061876,43.3326357315674}; - double[] expectedValuesLWRollingN = new double[]{59.3823815386426,59.7740042542256,61.6645074704619,66.5651015825184,64.9236256151963,63.9195646659437,63.0633891427656,63.1703959172873,62.0842218312365,61.5507094539991,59.9458124597247,62.0451549860138,63.5063034095735,61.62742572976,57.591356100339,54.8777141322954,57.2745023554145,58.7784762578773,58.2320686591241,56.3534564010822,53.2240832593016,46.6986552124813,45.4591519061876,43.3326357315674}; - - double[] expectedValuesLW_Traction_A_D = new double[]{46.8588001734408,46.7588001734407,46.6588001734408,47.1588001734408,44.0588001734407,51.1588001734408,47.7588001734407,41.2588001734407,43.8588001734408,44.0588001734407,42.6588001734408,41.9588001734407,40.4588001734407,41.5588001734407,38.5588001734407,38.1588001734408,35.9588001734407,34.3588001734408,33.4588001734407,32.3588001734408,28.7588001734407,24.6588001734408,19.4588001734407,17.4588001734407}; - double[] expectedValuesLW_Traction_A_E = new double[]{46.8588001734408,46.7588001734407,46.6588001734408,47.1588001734408,44.0588001734407,51.1588001734408,47.7588001734407,41.2588001734407,43.8588001734408,44.0588001734407,42.6588001734408,41.9588001734407,40.4588001734407,41.5588001734407,38.5588001734407,38.1588001734408,35.9588001734407,34.3588001734408,33.4588001734407,32.3588001734408,28.7588001734407,24.6588001734408,19.4588001734407,17.4588001734407}; - double[] expectedValuesLW_Traction_A_N = new double[]{46.8588001734408,46.7588001734407,46.6588001734408,47.1588001734408,44.0588001734407,51.1588001734408,47.7588001734407,41.2588001734407,43.8588001734408,44.0588001734407,42.6588001734408,41.9588001734407,40.4588001734407,41.5588001734407,38.5588001734407,38.1588001734408,35.9588001734407,34.3588001734408,33.4588001734407,32.3588001734408,28.7588001734407,24.6588001734408,19.4588001734407,17.4588001734407}; - - double[] expectedValuesL_Traction_B_D = new double[]{-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644}; - double[] expectedValuesL_Traction_B_E = new double[]{-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644}; - double[] expectedValuesL_Traction_B_N = new double[]{-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644,-42.0411998258644}; - - // Compute - RailwayVehicleParametersCnossos vehicleParameters = new RailwayVehicleParametersCnossos(vehCat, vehicleSpeed,vehiclePerHour, rollingCondition,idlingTime); - vehicleParameters.setSpectreVer(2); - RailwayTrackParametersCnossos trackParameters = new RailwayTrackParametersCnossos(vMaxInfra, trackTransfer, railRoughness, - impactNoise, bridgeTransfert, curvature, vehicleCommercial,isTunnel, nTracks); - RailWayLW lWRailWay = evaluateRailwaySourceCnossos.evaluate(vehicleParameters, trackParameters); - - for (int idFreq = 0; idFreq < 24; idFreq++) { - - //Day - double r = 10*Math.log10(Math.pow(10,(lWRailWay.getLWRolling()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - double tA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - double tB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - double aA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - double aB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - assertEquals(expectedValuesLWRollingD[idFreq], r , EPSILON_TEST1); - assertEquals(expectedValuesLW_Traction_A_D[idFreq], tA , EPSILON_TEST1); - assertEquals(expectedValuesL_Traction_B_D[idFreq], tB , EPSILON_TEST1); - - //Evening - r = 10*Math.log10(Math.pow(10,(lWRailWay.getLWRolling()[idFreq]+10 * Math.log10(nBUnit)+deltaTEvening)/10)); - tA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit)+deltaTEvening)/10)); - tB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit)+deltaTEvening)/10)); - aA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit)+deltaTEvening)/10)); - aB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit)+deltaTEvening)/10)); - assertEquals(expectedValuesLWRollingE[idFreq], r , EPSILON_TEST1); - assertEquals(expectedValuesLW_Traction_A_E[idFreq], tA , EPSILON_TEST1); - assertEquals(expectedValuesL_Traction_B_E[idFreq], tB , EPSILON_TEST1); - - //Night - r = 10*Math.log10(Math.pow(10,(lWRailWay.getLWRolling()[idFreq]+10 * Math.log10(nBUnit)+deltaTNight)/10)); - tA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit)+deltaTNight)/10)); - tB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit)+deltaTNight)/10)); - aA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit)+deltaTNight)/10)); - aB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit)+deltaTNight)/10)); - assertEquals(expectedValuesLWRollingN[idFreq], r , EPSILON_TEST1); - assertEquals(expectedValuesLW_Traction_A_N[idFreq], tA , EPSILON_TEST1); - assertEquals(expectedValuesL_Traction_B_N[idFreq], tB , EPSILON_TEST1); - } - } - - @Test - public void Test_Cnossos_Rail_emission_OC4() { - - evaluateRailwaySourceCnossos.setEvaluateRailwaySourceCnossos(EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Vehicles_SNCF_2021.json"), EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Train_SNCF_2021.json")); - - String vehCat = "SNCF2"; - double vehicleSpeed = 80; - int rollingCondition = 0; - double idlingTime = 0; - double nBUnit = 2; - double tDay = 0.4; - double tEvening = 0.3; - double tNight = 0.25; - - int nTracks=2; - int trackTransfer = 5; - int railRoughness = 1; - int impactNoise = 0; - int curvature = 0; - double vMaxInfra = 160; - double vehicleCommercial= 120; - boolean isTunnel = false; - int bridgeTransfert = 0; - - // Compute deltaT - double vehiclePerHour = (1000*vehicleSpeed); //for one vehicle - double deltaL0 = 10*Math.log10(vehiclePerHour*nTracks); - double deltaTDay = 10*Math.log10(tDay)-deltaL0; - double deltaTEvening = 10*Math.log10(tEvening)-deltaL0; - double deltaTNight = 10*Math.log10(tNight)-deltaL0; - - // Expected values - double[] expectedValuesLWRollingD = new double[]{44.5811582203502,45.6116947898327,47.5969356616694,52.5126336395229,51.6036576614023,51.4829525653331,51.2413101650301,52.4869369391373,52.4118192617118,52.7555537281504,52.5043005484679,55.985373426262,58.8950985837394,58.679050583264,55.7196084822321,53.3457970583518,55.7855234189905,57.210394790909,56.5821432750471,54.7233220990906,51.6891854554598,45.3992444894546,44.0806151592154,41.9401250458322}; - double[] expectedValuesLWRollingE = new double[]{43.3317708542672,44.3623074237497,46.3475482955864,51.2632462734399,50.3542702953193,50.2335651992501,49.9919227989471,51.2375495730543,51.1624318956288,51.5061663620674,51.2549131823849,54.735986060179,57.6457112176564,57.429663217181,54.4702211161491,52.0964096922688,54.5361360529075,55.961007424826,55.3327559089641,53.4739347330076,50.4397980893768,44.1498571233716,42.8312277931324,40.6907376797492}; - double[] expectedValuesLWRollingN = new double[]{42.5399583937909,43.5704949632734,45.5557358351102,50.4714338129637,49.562457834843,49.4417527387739,49.2001103384709,50.445737112578,50.3706194351526,50.7143539015912,50.4631007219087,53.9441735997028,56.8538987571802,56.6378507567048,53.6784086556728,51.3045972317925,53.7443235924312,55.1691949643497,54.5409434484879,52.6821222725313,49.6479856289006,43.3580446628953,42.0394153326562,39.898925219273}; - - double[] expectedValuesLW_Traction_A_D = new double[]{45.8897000433602,45.7897000433602,45.6897000433602,46.1897000433602,43.0897000433602,50.1897000433602,46.7897000433602,40.2897000433602,42.8897000433602,43.0897000433602,41.6897000433602,40.9897000433602,39.4897000433602,40.5897000433602,37.5897000433602,37.1897000433602,34.9897000433602,33.3897000433602,32.4897000433602,31.3897000433602,27.7897000433602,23.6897000433602,18.4897000433602,16.4897000433602}; - double[] expectedValuesLW_Traction_A_E = new double[]{44.6403126772772,44.5403126772772,44.4403126772772,44.9403126772772,41.8403126772772,48.9403126772772,45.5403126772772,39.0403126772772,41.6403126772772,41.8403126772772,40.4403126772772,39.7403126772772,38.2403126772772,39.3403126772772,36.3403126772772,35.9403126772772,33.7403126772772,32.1403126772772,31.2403126772772,30.1403126772772,26.5403126772772,22.4403126772772,17.2403126772772,15.2403126772772}; - double[] expectedValuesLW_Traction_A_N = new double[]{43.8485002168009,43.7485002168009,43.6485002168009,44.1485002168009,41.0485002168009,48.1485002168009,44.7485002168009,38.2485002168009,40.8485002168009,41.0485002168009,39.6485002168009,38.9485002168009,37.4485002168009,38.5485002168009,35.5485002168009,35.1485002168009,32.9485002168009,31.3485002168009,30.4485002168009,29.3485002168009,25.7485002168009,21.6485002168009,16.4485002168009,14.4485002168009}; - - double[] expectedValuesL_Traction_B_D = new double[]{-43.0102999557712,-43.0102999557712,-43.0102999557712,-43.0102999557712,-43.0102999557712,-43.0102999557712,-43.0102999557712,-43.0102999557712,-43.0102999557712,-43.0102999557712,-43.0102999557712,-43.0102999557712,-43.0102999557712,-43.0102999557712,-43.0102999557712,-43.0102999557712,-43.0102999557712,-43.0102999557712,-43.0102999557712,-43.0102999557712,-43.0102999557712,-43.0102999557712,-43.0102999557712,-43.0102999557712}; - double[] expectedValuesL_Traction_B_E = new double[]{-44.2596873215647,-44.2596873215647,-44.2596873215647,-44.2596873215647,-44.2596873215647,-44.2596873215647,-44.2596873215647,-44.2596873215647,-44.2596873215647,-44.2596873215647,-44.2596873215647,-44.2596873215647,-44.2596873215647,-44.2596873215647,-44.2596873215647,-44.2596873215647,-44.2596873215647,-44.2596873215647,-44.2596873215647,-44.2596873215647,-44.2596873215647,-44.2596873215647,-44.2596873215647,-44.2596873215647}; - double[] expectedValuesL_Traction_B_N = new double[]{-45.0514997818093,-45.0514997818093,-45.0514997818093,-45.0514997818093,-45.0514997818093,-45.0514997818093,-45.0514997818093,-45.0514997818093,-45.0514997818093,-45.0514997818093,-45.0514997818093,-45.0514997818093,-45.0514997818093,-45.0514997818093,-45.0514997818093,-45.0514997818093,-45.0514997818093,-45.0514997818093,-45.0514997818093,-45.0514997818093,-45.0514997818093,-45.0514997818093,-45.0514997818093,-45.0514997818093}; - - // Compute - RailwayVehicleParametersCnossos vehicleParameters = new RailwayVehicleParametersCnossos(vehCat, vehicleSpeed,vehiclePerHour, rollingCondition,idlingTime); - vehicleParameters.setSpectreVer(2); - RailwayTrackParametersCnossos trackParameters = new RailwayTrackParametersCnossos(vMaxInfra, trackTransfer, railRoughness, - impactNoise, bridgeTransfert, curvature, vehicleCommercial,isTunnel, nTracks); - RailWayLW lWRailWay = evaluateRailwaySourceCnossos.evaluate(vehicleParameters, trackParameters); - - for (int idFreq = 0; idFreq < 24; idFreq++) { - - //Day - double r = 10*Math.log10(Math.pow(10,(lWRailWay.getLWRolling()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - double tA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - double tB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - double aA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - double aB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - assertEquals(expectedValuesLWRollingD[idFreq], r , EPSILON_TEST1); - assertEquals(expectedValuesLW_Traction_A_D[idFreq], tA , EPSILON_TEST1); - assertEquals(expectedValuesL_Traction_B_D[idFreq], tB , EPSILON_TEST1); - - //Evening - r = 10*Math.log10(Math.pow(10,(lWRailWay.getLWRolling()[idFreq]+10 * Math.log10(nBUnit)+deltaTEvening)/10)); - tA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit)+deltaTEvening)/10)); - tB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit)+deltaTEvening)/10)); - aA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit)+deltaTEvening)/10)); - aB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit)+deltaTEvening)/10)); - assertEquals(expectedValuesLWRollingE[idFreq], r , EPSILON_TEST1); - assertEquals(expectedValuesLW_Traction_A_E[idFreq], tA , EPSILON_TEST1); - assertEquals(expectedValuesL_Traction_B_E[idFreq], tB , EPSILON_TEST1); - - //Night - r = 10*Math.log10(Math.pow(10,(lWRailWay.getLWRolling()[idFreq]+10 * Math.log10(nBUnit)+deltaTNight)/10)); - tA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit)+deltaTNight)/10)); - tB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit)+deltaTNight)/10)); - aA= 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit)+deltaTNight)/10)); - aB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit)+deltaTNight)/10)); - assertEquals(expectedValuesLWRollingN[idFreq], r , EPSILON_TEST1); - assertEquals(expectedValuesLW_Traction_A_N[idFreq], tA, EPSILON_TEST1); - assertEquals(expectedValuesL_Traction_B_N[idFreq], tB , EPSILON_TEST1); - - } - } - - @Test - public void Test_Cnossos_Rail_emission_OC5() { - - evaluateRailwaySourceCnossos.setEvaluateRailwaySourceCnossos(EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Vehicles_SNCF_2021.json"), EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Train_SNCF_2021.json")); - // TGV-D-U2 - String vehCat1 = "SNCF2"; - double vehicleSpeed1 = 80; - int rollingCondition1 = 0; - double idlingTime1 = 0; - double nBUnit1 = 2; - double tDay1 = 0.4; - double tEvening1 = 0.3; - double tNight1 = 0.25; - - // Corail - String vehCat2 = "SNCF6"; - double vehicleSpeed2 = 120; - int rollingCondition2 = 0; - double idlingTime2 = 0; - double nBUnit2 = 1; - double tDay2 = 0.5; - double tEvening2 = 0.5; - double tNight2 = 0.2; - - String vehCat3 = "SNCF73"; - double vehicleSpeed3 = 120; - int rollingCondition3 = 0; - double idlingTime3 = 0; - double nBUnit3 = 9; - double tDay3 = 0.5; - double tEvening3 = 0.5; - double tNight3 = 0.2; - - // V2N Train - String vehCat4 = "SNCF8"; - double vehicleSpeed4 = 100; - int rollingCondition4 = 0; - double idlingTime4 = 0; - double nBUnit4 = 1; - double tDay4 = 0.2; - double tEvening4 = 0.3; - double tNight4 = 0.7; - - String vehCat5 = "SNCF69"; - double vehicleSpeed5 = 100; - int rollingCondition5 = 0; - double idlingTime5 = 0; - double nBUnit5 = 4; - double tDay5 = 0.2; - double tEvening5 = 0.3; - double tNight5 = 0.7; - - // Section - int nTracks=2; - int trackTransfer = 7; - int railRoughness = 1; - int impactNoise = 0; - int curvature = 0; - double vMaxInfra = 160; - double vehicleCommercial= 120; - boolean isTunnel = false; - int bridgeTransfert = 0; - - // Compute deltaT - double vehiclePerHour1 = (1000*vehicleSpeed1); //for one vehicle - double deltaL0 = 10*Math.log10(vehiclePerHour1*nTracks); - double deltaTDay1 = 10*Math.log10(tDay1)-deltaL0; - double deltaTEvening1 = 10*Math.log10(tEvening1)-deltaL0; - double deltaTNight1 = 10*Math.log10(tNight1)-deltaL0; - - double vehiclePerHour2 = (1000*vehicleSpeed2); //for one vehicle - deltaL0 = 10*Math.log10(vehiclePerHour2*nTracks); - double deltaTDay2 = 10*Math.log10(tDay2)-deltaL0; - double deltaTEvening2 = 10*Math.log10(tEvening2)-deltaL0; - double deltaTNight2 = 10*Math.log10(tNight2)-deltaL0; - - double vehiclePerHour3 = (1000*vehicleSpeed3); //for one vehicle - deltaL0 = 10*Math.log10(vehiclePerHour3*nTracks); - double deltaTDay3 = 10*Math.log10(tDay3)-deltaL0; - double deltaTEvening3 = 10*Math.log10(tEvening3)-deltaL0; - double deltaTNight3 = 10*Math.log10(tNight3)-deltaL0; - - double vehiclePerHour4 = (1000*vehicleSpeed4); //for one vehicle - deltaL0 = 10*Math.log10(vehiclePerHour4*nTracks); - double deltaTDay4 = 10*Math.log10(tDay4)-deltaL0; - double deltaTEvening4 = 10*Math.log10(tEvening4)-deltaL0; - double deltaTNight4 = 10*Math.log10(tNight4)-deltaL0; - - double vehiclePerHour5 = (1000*vehicleSpeed5); //for one vehicle - deltaL0 = 10*Math.log10(vehiclePerHour5*nTracks); - double deltaTDay5 = 10*Math.log10(tDay5)-deltaL0; - double deltaTEvening5 = 10*Math.log10(tEvening5)-deltaL0; - double deltaTNight5 = 10*Math.log10(tNight5)-deltaL0; - - // Expected values - double[] expectedValuesLWRollingD = new double[]{47.1552955205404,48.8498299106887,52.6506665062211,59.9189540729727,57.9682560825282,58.5872885355725,59.0528160959685,60.1904875304058,60.6442541026116,62.4955801250664,64.9184365575419,70.5236596616762,75.9091586312107,76.6780384718047,74.8656580571925,71.8258438346925,69.0422555458139,66.2590037381391,64.4635730861252,62.3174294364882,58.0523015636309,51.1818941714616,49.4692864131497,47.5870164960235}; - double[] expectedValuesLWRollingE = new double[]{46.7153189292102,48.540003543594,52.5625340892052,60.0787091329295,57.9923893388288,58.6495173688799,59.0916185428417,60.1979886666328,60.6185205324881,62.4960038970257,64.9683137433641,70.562548216149,75.9313127158166,76.6869876714216,74.8713872507045,71.8271267251379,69.0163596754784,66.1966324248387,64.3988216929349,62.2298468109704,57.9544897520346,51.0604922061408,49.3019210916908,47.4515242894244}; - double[] expectedValuesLWRollingN = new double[]{46.1270508967803,48.0388064828929,51.9977848913093,59.7778707051652,57.4505710153709,58.0747874408452,58.2265981950651,59.2354414276101,59.2675554683469,60.7056375004388,62.8199452089267,67.8798770364391,72.7517670066939,73.2280095787096,71.3038487930857,68.2530122348682,65.6895763573932,63.6625773432251,62.317581482955,60.0794037396615,56.4441459388305,49.9352912430575,48.0608827756958,46.1859326090793}; - - double[] expectedValuesLW_Traction_A_D = new double[]{46.6113350513868,46.5361930551615,46.4507560297314,46.4615638226975,43.7430615177986,50.3108176641904,47.0669699562295,41.9733820154675,44.9476552863602,44.0601109307387,43.5845906890585,42.5291935606719,44.0678692086462,42.2820604493695,39.3273037341639,38.7228940509159,37.701456345155,35.0584081257409,34.9065665976502,32.1860323878995,28.9788221314718,24.6576825124615,19.3206918485612,17.4371753071292}; - double[] expectedValuesLW_Traction_A_E = new double[]{45.8328681049925,45.786234654668,45.7429051220906,45.3887520516725,42.8767932132583,49.1270860066919,45.9523201972128,41.2845923821496,44.272113341395,43.2015176915916,42.9875064075318,41.9345847780754,43.7642442442831,41.6353141126725,38.7319900260274,37.9848318047791,37.2510674836558,34.3066693732319,34.2589449165509,31.1934631044681,28.0984026857766,23.7802040911827,18.466879142774,16.6411101334843}; - double[] expectedValuesLW_Traction_A_N = new double[]{46.0848410660751,46.1332009230439,46.2608016902272,44.9756706211064,42.8060094745255,48.4199531690002,45.2738703819419,40.3948530934846,42.8148965285004,42.5567543659976,42.3409101395776,41.8331316056441,41.8487195283546,40.999669853935,38.3337368784949,37.035478413884,36.3931579683877,33.005287899018,32.377048539335,30.045709663381,26.8475690712121,23.0216616855918,18.1249028285137,16.4062831110709}; - - double[] expectedValuesL_Traction_B_D = new double[]{28.1206003941747,27.4206004782821,24.7206009653633,22.9206015056726,21.5206021113937,22.6206016195594,24.0206011493702,28.2206003832282,28.7206003321217,23.6206012686259,27.6206004528527,25.1206008727914,23.6206012686259,24.4206010406076,23.4206013325014,22.3206017415914,21.0206023796041,20.020603018198,18.9206039131889,15.1206095083875,12.9206158371834,11.0206245764616,5.12069586340405,3.82072934593712}; - double[] expectedValuesL_Traction_B_E = new double[]{29.8815127708764,29.181512817581,26.4815130880562,24.6815133880888,23.2815137244444,24.3815134513299,25.7815131902348,29.9815127647978,30.4815127364185,25.3815132564572,29.3815128034602,26.8815130366512,25.3815132564572,26.1815131298392,25.1815132919272,24.0815135190939,22.7815138733811,21.7815142279909,20.6815147249775,16.8815178319809,14.6815213463517,12.7815261992633,6.88156578498707,5.58158437797714}; - double[] expectedValuesL_Traction_B_N = new double[]{33.5612804391897,32.8612804536025,30.1612805370699,28.3612806296585,26.9612807334563,28.0612806491744,29.4612805686017,33.6612804373138,34.1612804285561,29.0612805890376,33.0612804492449,30.5612805212065,29.0612805890376,29.8612805499639,28.8612805999835,27.7612806700861,26.4612807794175,25.4612808888484,24.3612810422162,20.5612820010234,18.361283085543,16.4612845831314,10.561296799165,9.26130253693161}; - - // Compute - RailwayVehicleParametersCnossos vehicleParameters1 = new RailwayVehicleParametersCnossos(vehCat1, vehicleSpeed1,vehiclePerHour1, rollingCondition1,idlingTime1); - RailwayVehicleParametersCnossos vehicleParameters2 = new RailwayVehicleParametersCnossos(vehCat2, vehicleSpeed2,vehiclePerHour2, rollingCondition2,idlingTime2); - RailwayVehicleParametersCnossos vehicleParameters3 = new RailwayVehicleParametersCnossos(vehCat3, vehicleSpeed3,vehiclePerHour3, rollingCondition3,idlingTime3); - RailwayVehicleParametersCnossos vehicleParameters4 = new RailwayVehicleParametersCnossos(vehCat4, vehicleSpeed4,vehiclePerHour4, rollingCondition4,idlingTime4); - RailwayVehicleParametersCnossos vehicleParameters5 = new RailwayVehicleParametersCnossos(vehCat5, vehicleSpeed5,vehiclePerHour5, rollingCondition5,idlingTime5); - RailwayTrackParametersCnossos trackParameters = new RailwayTrackParametersCnossos(vMaxInfra, trackTransfer, railRoughness, - impactNoise, bridgeTransfert, curvature, vehicleCommercial,isTunnel, nTracks); - RailWayLW lWRailWay1 = evaluateRailwaySourceCnossos.evaluate(vehicleParameters1, trackParameters); - RailWayLW lWRailWay2 = evaluateRailwaySourceCnossos.evaluate(vehicleParameters2, trackParameters); - RailWayLW lWRailWay3 = evaluateRailwaySourceCnossos.evaluate(vehicleParameters3, trackParameters); - RailWayLW lWRailWay4 = evaluateRailwaySourceCnossos.evaluate(vehicleParameters4, trackParameters); - RailWayLW lWRailWay5 = evaluateRailwaySourceCnossos.evaluate(vehicleParameters5, trackParameters); - RailWayLW lWRailWay = new RailWayLW(); - for (int idFreq = 0; idFreq < 24; idFreq++) { - - //Day - double rolling = 10*Math.log10(Math.pow(10,(lWRailWay1.getLWRolling()[idFreq]+10 * Math.log10(nBUnit1)+deltaTDay1)/10)+Math.pow(10,(lWRailWay2.getLWRolling()[idFreq]+10 * Math.log10(nBUnit2)+deltaTDay2)/10)+Math.pow(10,(lWRailWay3.getLWRolling()[idFreq]+10 * Math.log10(nBUnit3)+deltaTDay3)/10)+Math.pow(10,(lWRailWay4.getLWRolling()[idFreq]+10 * Math.log10(nBUnit4)+deltaTDay4)/10)+Math.pow(10,(lWRailWay5.getLWRolling()[idFreq]+10 * Math.log10(nBUnit5)+deltaTDay5)/10)); - double tractionA = 10*Math.log10(Math.pow(10,(lWRailWay1.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit1)+deltaTDay1)/10)+Math.pow(10,(lWRailWay2.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit2)+deltaTDay2)/10)+Math.pow(10,(lWRailWay3.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit3)+deltaTDay3)/10)+Math.pow(10,(lWRailWay4.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit4)+deltaTDay4)/10)+Math.pow(10,(lWRailWay5.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit5)+deltaTDay5)/10)); - double tractionB = 10*Math.log10(Math.pow(10,(lWRailWay1.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit1)+deltaTDay1)/10)+Math.pow(10,(lWRailWay2.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit2)+deltaTDay2)/10)+Math.pow(10,(lWRailWay3.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit3)+deltaTDay3)/10)+Math.pow(10,(lWRailWay4.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit4)+deltaTDay4)/10)+Math.pow(10,(lWRailWay5.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit5)+deltaTDay5)/10)); - double aeroA = 10*Math.log10(Math.pow(10,(lWRailWay1.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit1)+deltaTDay1)/10)+Math.pow(10,(lWRailWay2.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit2)+deltaTDay2)/10)+Math.pow(10,(lWRailWay3.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit3)+deltaTDay3)/10)+Math.pow(10,(lWRailWay4.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit4)+deltaTDay4)/10)+Math.pow(10,(lWRailWay5.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit5)+deltaTDay5)/10)); - double aeroB = 10*Math.log10(Math.pow(10,(lWRailWay1.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit1)+deltaTDay1)/10)+Math.pow(10,(lWRailWay2.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit2)+deltaTDay2)/10)+Math.pow(10,(lWRailWay3.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit3)+deltaTDay3)/10)+Math.pow(10,(lWRailWay4.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit4)+deltaTDay4)/10)+Math.pow(10,(lWRailWay5.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit5)+deltaTDay5)/10)); - assertEquals(expectedValuesLWRollingD[idFreq], rolling , EPSILON_TEST1); - assertEquals(expectedValuesLW_Traction_A_D[idFreq], tractionA , EPSILON_TEST1); - assertEquals(expectedValuesL_Traction_B_D[idFreq], tractionB , EPSILON_TEST1); - - //Evening - rolling = 10*Math.log10(Math.pow(10,(lWRailWay1.getLWRolling()[idFreq]+10 * Math.log10(nBUnit1)+deltaTEvening1)/10)+Math.pow(10,(lWRailWay2.getLWRolling()[idFreq]+10 * Math.log10(nBUnit2)+deltaTEvening2)/10)+Math.pow(10,(lWRailWay3.getLWRolling()[idFreq]+10 * Math.log10(nBUnit3)+deltaTEvening3)/10)+Math.pow(10,(lWRailWay4.getLWRolling()[idFreq]+10 * Math.log10(nBUnit4)+deltaTEvening4)/10)+Math.pow(10,(lWRailWay5.getLWRolling()[idFreq]+10 * Math.log10(nBUnit5)+deltaTEvening5)/10)); - tractionA = 10*Math.log10(Math.pow(10,(lWRailWay1.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit1)+deltaTEvening1)/10)+Math.pow(10,(lWRailWay2.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit2)+deltaTEvening2)/10)+Math.pow(10,(lWRailWay3.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit3)+deltaTEvening3)/10)+Math.pow(10,(lWRailWay4.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit4)+deltaTEvening4)/10)+Math.pow(10,(lWRailWay5.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit5)+deltaTEvening5)/10)); - tractionB = 10*Math.log10(Math.pow(10,(lWRailWay1.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit1)+deltaTEvening1)/10)+Math.pow(10,(lWRailWay2.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit2)+deltaTEvening2)/10)+Math.pow(10,(lWRailWay3.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit3)+deltaTEvening3)/10)+Math.pow(10,(lWRailWay4.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit4)+deltaTEvening4)/10)+Math.pow(10,(lWRailWay5.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit5)+deltaTEvening5)/10)); - aeroA = 10*Math.log10(Math.pow(10,(lWRailWay1.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit1)+deltaTEvening1)/10)+Math.pow(10,(lWRailWay2.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit2)+deltaTEvening2)/10)+Math.pow(10,(lWRailWay3.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit3)+deltaTEvening3)/10)+Math.pow(10,(lWRailWay4.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit4)+deltaTEvening4)/10)+Math.pow(10,(lWRailWay5.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit5)+deltaTEvening5)/10)); - aeroB = 10*Math.log10(Math.pow(10,(lWRailWay1.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit1)+deltaTEvening1)/10)+Math.pow(10,(lWRailWay2.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit2)+deltaTEvening2)/10)+Math.pow(10,(lWRailWay3.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit3)+deltaTEvening3)/10)+Math.pow(10,(lWRailWay4.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit4)+deltaTEvening4)/10)+Math.pow(10,(lWRailWay5.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit5)+deltaTEvening5)/10)); - assertEquals(expectedValuesLWRollingE[idFreq], rolling , EPSILON_TEST1); - assertEquals(expectedValuesLW_Traction_A_E[idFreq], tractionA , EPSILON_TEST1); - assertEquals(expectedValuesL_Traction_B_E[idFreq], tractionB , EPSILON_TEST1); - - //Night - rolling = 10*Math.log10(Math.pow(10,(lWRailWay1.getLWRolling()[idFreq]+10 * Math.log10(nBUnit1)+deltaTNight1)/10)+Math.pow(10,(lWRailWay2.getLWRolling()[idFreq]+10 * Math.log10(nBUnit2)+deltaTNight2)/10)+Math.pow(10,(lWRailWay3.getLWRolling()[idFreq]+10 * Math.log10(nBUnit3)+deltaTNight3)/10)+Math.pow(10,(lWRailWay4.getLWRolling()[idFreq]+10 * Math.log10(nBUnit4)+deltaTNight4)/10)+Math.pow(10,(lWRailWay5.getLWRolling()[idFreq]+10 * Math.log10(nBUnit5)+deltaTNight5)/10)); - tractionA = 10*Math.log10(Math.pow(10,(lWRailWay1.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit1)+deltaTNight1)/10)+Math.pow(10,(lWRailWay2.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit2)+deltaTNight2)/10)+Math.pow(10,(lWRailWay3.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit3)+deltaTNight3)/10)+Math.pow(10,(lWRailWay4.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit4)+deltaTNight4)/10)+Math.pow(10,(lWRailWay5.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit5)+deltaTNight5)/10)); - tractionB = 10*Math.log10(Math.pow(10,(lWRailWay1.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit1)+deltaTNight1)/10)+Math.pow(10,(lWRailWay2.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit2)+deltaTNight2)/10)+Math.pow(10,(lWRailWay3.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit3)+deltaTNight3)/10)+Math.pow(10,(lWRailWay4.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit4)+deltaTNight4)/10)+Math.pow(10,(lWRailWay5.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit5)+deltaTNight5)/10)); - aeroA = 10*Math.log10(Math.pow(10,(lWRailWay1.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit1)+deltaTNight1)/10)+Math.pow(10,(lWRailWay2.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit2)+deltaTNight2)/10)+Math.pow(10,(lWRailWay3.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit3)+deltaTNight3)/10)+Math.pow(10,(lWRailWay4.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit4)+deltaTNight4)/10)+Math.pow(10,(lWRailWay5.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit5)+deltaTNight5)/10)); - aeroB = 10*Math.log10(Math.pow(10,(lWRailWay1.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit1)+deltaTNight1)/10)+Math.pow(10,(lWRailWay2.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit2)+deltaTNight2)/10)+Math.pow(10,(lWRailWay3.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit3)+deltaTNight3)/10)+Math.pow(10,(lWRailWay4.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit4)+deltaTNight4)/10)+Math.pow(10,(lWRailWay5.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit5)+deltaTNight5)/10)); - assertEquals(expectedValuesLWRollingN[idFreq], rolling , EPSILON_TEST1); - assertEquals(expectedValuesLW_Traction_A_N[idFreq], tractionA , EPSILON_TEST1); - assertEquals(expectedValuesL_Traction_B_N[idFreq], tractionB , EPSILON_TEST1); - } - } - - @Test - public void Test_Cnossos_Rail_emission_OC6() { - - evaluateRailwaySourceCnossos.setEvaluateRailwaySourceCnossos(EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Vehicles_SNCF_2021.json"), EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Train_SNCF_2021.json")); - - String vehCat = "SNCF2"; - double vehicleSpeed = 80; - int rollingCondition = 0; - double idlingTime = 0; - double nBUnit = 2; - double tDay = 0.4; - double tEvening = 0.3; - double tNight = 0.25; - - int nTracks=2; - int trackTransfer = 5; - int railRoughness = 1; - int impactNoise = 1; - int curvature = 0; - double vMaxInfra = 160; - double vehicleCommercial= 120; - boolean isTunnel = true; - int bridgeTransfert = 0; - - // Compute deltaT - double vehiclePerHour = (1000*vehicleSpeed); //for one vehicle - double deltaL0 = 10*Math.log10(vehiclePerHour*nTracks); - double deltaTDay = 10*Math.log10(tDay)-deltaL0; - double deltaTEvening = 10*Math.log10(tEvening)-deltaL0; - double deltaTNight = 10*Math.log10(tNight)-deltaL0; - - // Expected values - double[] expectedValuesLWRollingD = new double[]{-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140}; - double[] expectedValuesLW_Traction_A_D = new double[]{-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140}; - double[] expectedValuesL_Traction_B_D = new double[]{-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140}; - double[] expectedValuesLW_Aero_A_D = new double[]{-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140}; - double[] expectedValuesLW_Aero_B_D = new double[]{-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140,-140}; - - // Compute - RailwayVehicleParametersCnossos vehicleParameters = new RailwayVehicleParametersCnossos(vehCat, vehicleSpeed,vehiclePerHour, rollingCondition,idlingTime); - vehicleParameters.setSpectreVer(2); - RailwayTrackParametersCnossos trackParameters = new RailwayTrackParametersCnossos(vMaxInfra, trackTransfer, railRoughness, - impactNoise, bridgeTransfert, curvature, vehicleCommercial,isTunnel, nTracks); - RailWayLW lWRailWay = evaluateRailwaySourceCnossos.evaluate(vehicleParameters, trackParameters); - - for (int idFreq = 0; idFreq < 24; idFreq++) { - - //Day - lWRailWay.getLWRolling()[idFreq] = 10*Math.log10(Math.pow(10,(lWRailWay.getLWRolling()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - lWRailWay.getLWTractionA()[idFreq] = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - lWRailWay.getLWTractionB()[idFreq] = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - lWRailWay.getLWAerodynamicA()[idFreq] = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - lWRailWay.getLWAerodynamicB()[idFreq] = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - assertTrue(expectedValuesLWRollingD[idFreq] > lWRailWay.getLWRolling()[idFreq]); - assertTrue(expectedValuesLW_Traction_A_D[idFreq]> lWRailWay.getLWTractionA()[idFreq] ); - assertTrue(expectedValuesL_Traction_B_D[idFreq]> lWRailWay.getLWTractionB()[idFreq] ); - assertTrue(expectedValuesLW_Aero_A_D[idFreq]> lWRailWay.getLWAerodynamicA()[idFreq] ); - assertTrue(expectedValuesLW_Aero_B_D[idFreq]> lWRailWay.getLWAerodynamicB()[idFreq] ); - - } - } - - @Test - public void Test_Cnossos_Rail_emission_OC7() { - - evaluateRailwaySourceCnossos.setEvaluateRailwaySourceCnossos(EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Vehicles_SNCF_2021.json"), EvaluateRailwaySourceCnossos.class.getResourceAsStream("Rail_Train_SNCF_2021.json")); - - String vehCat = "SNCF2"; - double vehicleSpeed = 300; - int rollingCondition = 0; - double idlingTime = 0; - double nBUnit = 2; - double tDay = 0.4; - double tEvening = 0.3; - double tNight = 0.25; - - int nTracks=2; - int trackTransfer = 5; - int railRoughness = 2; - int impactNoise = 0; - int curvature = 0; - double vMaxInfra = 350; - double vehicleCommercial= 300; - boolean isTunnel = false; - int bridgeTransfert = 0; - - // Compute deltaT - double vehiclePerHour = (1000*vehicleSpeed); //for one vehicle - double deltaL0 = 10*Math.log10(vehiclePerHour*nTracks); - double deltaTDay = 10*Math.log10(tDay)-deltaL0; - double deltaTEvening = 10*Math.log10(tEvening)-deltaL0; - double deltaTNight = 10*Math.log10(tNight)-deltaL0; - - // Expected values - double[] expectedValuesLWRollingD = new double[]{33.6733596010837,34.95169576625,38.2539731975929,44.1801059537931,42.888610835611,44.0148743871629,45.6800277990472,47.6677743937925,48.7556304666653,51.3814838437463,52.4049926613164,57.631720998909,63.3357285948357,66.1337582772167,66.4000139556384,66.2606389650649,67.9407445637443,68.7526472395718,67.7497360005367,64.0167245325835,58.7017301999714,52.2571748232612,52.5279874725351,50.9834474448221}; - double[] expectedValuesLWRollingE = new double[]{32.4239722350007,33.702308400167,37.0045858315099,42.9307185877101,41.639223469528,42.7654870210799,44.4306404329642,46.4183870277095,47.5062431005823,50.1320964776633,51.1556052952334,56.382333632826,62.0863412287527,64.8843709111337,65.1506265895554,65.0112515989819,66.6913571976613,67.5032598734888,66.5003486344537,62.7673371665005,57.4523428338884,51.0077874571782,51.2786001064521,49.7340600787391}; - double[] expectedValuesLWRollingN = new double[]{31.6321597745245,32.9104959396908,36.2127733710337,42.1389061272339,40.8474110090518,41.9736745606036,43.638827972488,45.6265745672333,46.714430640106,49.340284017187,50.3637928347571,55.5905211723497,61.2945287682765,64.0925584506574,64.3588141290791,64.2194391385057,65.899544737185,66.7114474130125,65.7085361739774,61.9755247060243,56.6605303734121,50.2159749967019,50.4867876459759,48.9422476182628}; - - double[] expectedValuesLW_Traction_A_D = new double[]{40.149387366083,40.049387366083,39.949387366083,40.449387366083,37.349387366083,44.449387366083,41.049387366083,34.549387366083,37.149387366083,37.349387366083,35.949387366083,35.249387366083,33.749387366083,34.849387366083,31.849387366083,31.449387366083,29.249387366083,27.649387366083,26.749387366083,25.649387366083,22.049387366083,17.949387366083,12.749387366083,10.749387366083}; - double[] expectedValuesLW_Traction_A_E = new double[]{38.9,38.8,38.7,39.2,36.1,43.2,39.8,33.3,35.9,36.1,34.7,34,32.5,33.6,30.6,30.2,28,26.4,25.5,24.4,20.8,16.7,11.5,9.50000000000001}; - double[] expectedValuesLW_Traction_A_N = new double[]{38.1081875395238,38.0081875395237,37.9081875395238,38.4081875395238,35.3081875395237,42.4081875395238,39.0081875395237,32.5081875395237,35.1081875395238,35.3081875395237,33.9081875395238,33.2081875395237,31.7081875395237,32.8081875395237,29.8081875395237,29.4081875395238,27.2081875395237,25.6081875395238,24.7081875395237,23.6081875395238,20.0081875395237,15.9081875395238,10.7081875395238,8.70818753952375}; - - double[] expectedValuesL_Traction_B_D = new double[]{-48.7506126306598,-48.7506126306598,-48.7506126306598,-48.7506126306598,-48.7506126306598,-48.7506126306598,-48.7506126306598,-48.7506126306598,-48.7506126306598,-48.7506126306598,-48.7506126306598,-48.7506126306598,-48.7506126306598,-48.7506126306598,-48.7506126306598,-48.7506126306598,-48.7506126306598,-48.7506126306598,-48.7506126306598,-48.7506126306598,-48.7506126306598,-48.7506126306598,-48.7506126306598,-48.7506126306598}; - double[] expectedValuesL_Traction_B_E = new double[]{-49.9999999956571,-49.9999999956571,-49.9999999956571,-49.9999999956571,-49.9999999956571,-49.9999999956571,-49.9999999956571,-49.9999999956571,-49.9999999956571,-49.9999999956571,-49.9999999956571,-49.9999999956571,-49.9999999956571,-49.9999999956571,-49.9999999956571,-49.9999999956571,-49.9999999956571,-49.9999999956571,-49.9999999956571,-49.9999999956571,-49.9999999956571,-49.9999999956571,-49.9999999956571,-49.9999999956571}; - double[] expectedValuesL_Traction_B_N = new double[]{-50.7918124552647,-50.7918124552647,-50.7918124552647,-50.7918124552647,-50.7918124552647,-50.7918124552647,-50.7918124552647,-50.7918124552647,-50.7918124552647,-50.7918124552647,-50.7918124552647,-50.7918124552647,-50.7918124552647,-50.7918124552647,-50.7918124552647,-50.7918124552647,-50.7918124552647,-50.7918124552647,-50.7918124552647,-50.7918124552647,-50.7918124552647,-50.7918124552647,-50.7918124552647,-50.7918124552647}; - - double[] expectedValuesLW_Aero_A_D = new double[]{52.449387366083,53.649387366083,52.149387366083,52.449387366083,51.649387366083,52.049387366083,54.649387366083,57.349387366083,58.049387366083,58.349387366083,59.149387366083,57.549387366083,41.049387366083,38.449387366083,35.549387366083,32.449387366083,28.849387366083,26.249387366083,20.049387366083,-19.5506126339131,-62.7506125520996,-62.650612553962,-64.4506125129002,-64.5506125100814}; - double[] expectedValuesLW_Aero_A_E = new double[]{51.2,52.4,50.9,51.2,50.4,50.8,53.4,56.1,56.8,57.1,57.9,56.3,39.8,37.2,34.3,31.2,27.6,25,18.8,-20.7999999999948,-63.9999998909102,-63.8999998933933,-65.6999998386443,-65.7999998348859}; - double[] expectedValuesLW_Aero_A_N = new double[]{50.4081875395238,51.6081875395238,50.1081875395238,50.4081875395238,49.6081875395238,50.0081875395237,52.6081875395238,55.3081875395237,56.0081875395237,56.3081875395237,57.1081875395238,55.5081875395237,39.0081875395237,36.4081875395238,33.5081875395237,30.4081875395238,26.8081875395237,24.2081875395237,18.0081875395237,-21.59181246047,-64.7918123295684,-64.6918123325483,-66.4918122668494,-66.5918122623393}; - - double[] expectedValuesLW_Aero_B_D = new double[]{61.449387366083,62.549387366083,63.849387366083,64.949387366083,63.949387366083,62.349387366083,62.349387366083,61.449387366083,62.049387366083,62.349387366083,62.249387366083,60.649387366083,58.549387366083,57.349387366083,51.849387366083,48.949387366083,42.849387366083,16.349387366083,-34.9506126337812,-56.5506126142904,-56.3506126151737,-55.7506126175923,-61.7506125689271,-62.4506125575606}; - double[] expectedValuesLW_Aero_B_E = new double[]{60.2,61.3,62.6,63.7,62.7,61.1,61.1,60.2,60.8,61.1,61,59.4,57.3,56.1,50.6,47.7,41.6,15.1,-36.199999999819,-57.7999999738312,-57.599999975009,-56.9999999782337,-62.9999999133469,-63.6999998981914}; - double[] expectedValuesLW_Aero_B_N = new double[]{59.4081875395238,60.5081875395237,61.8081875395237,62.9081875395238,61.9081875395238,60.3081875395237,60.3081875395237,59.4081875395238,60.0081875395237,60.3081875395237,60.2081875395237,58.6081875395238,56.5081875395237,55.3081875395237,49.8081875395237,46.9081875395238,40.8081875395237,14.3081875395237,-36.991812460259,-58.5918124290736,-58.391812430487,-57.7918124343567,-63.7918123564925,-64.491812338306}; - - // Compute - RailwayVehicleParametersCnossos vehicleParameters = new RailwayVehicleParametersCnossos(vehCat, vehicleSpeed,vehiclePerHour, rollingCondition,idlingTime); - vehicleParameters.setSpectreVer(2); - RailwayTrackParametersCnossos trackParameters = new RailwayTrackParametersCnossos(vMaxInfra, trackTransfer, railRoughness, - impactNoise, bridgeTransfert, curvature, vehicleCommercial,isTunnel, nTracks); - RailWayLW lWRailWay = evaluateRailwaySourceCnossos.evaluate(vehicleParameters, trackParameters); - - for (int idFreq = 0; idFreq < 24; idFreq++) { - - //Day - double r = 10*Math.log10(Math.pow(10,(lWRailWay.getLWRolling()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - double tA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - double tB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - double aA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - double aB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit)+deltaTDay)/10)); - assertEquals(expectedValuesLWRollingD[idFreq], r , EPSILON_TEST1); - assertEquals(expectedValuesLW_Traction_A_D[idFreq], tA , EPSILON_TEST1); - assertEquals(expectedValuesL_Traction_B_D[idFreq], tB, EPSILON_TEST1); - assertEquals(expectedValuesLW_Aero_A_D[idFreq], aA, EPSILON_TEST1); - assertEquals(expectedValuesLW_Aero_B_D[idFreq], aB , EPSILON_TEST1); - - //Evening - r = 10*Math.log10(Math.pow(10,(lWRailWay.getLWRolling()[idFreq]+10 * Math.log10(nBUnit)+deltaTEvening)/10)); - tA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit)+deltaTEvening)/10)); - tB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit)+deltaTEvening)/10)); - aA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit)+deltaTEvening)/10)); - aB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit)+deltaTEvening)/10)); - assertEquals(expectedValuesLWRollingE[idFreq], r , EPSILON_TEST1); - assertEquals(expectedValuesLW_Traction_A_E[idFreq], tA , EPSILON_TEST1); - assertEquals(expectedValuesL_Traction_B_E[idFreq], tB, EPSILON_TEST1); - assertEquals(expectedValuesLW_Aero_A_E[idFreq], aA , EPSILON_TEST1); - assertEquals(expectedValuesLW_Aero_B_E[idFreq], aB , EPSILON_TEST1); - - //Night - r = 10*Math.log10(Math.pow(10,(lWRailWay.getLWRolling()[idFreq]+10 * Math.log10(nBUnit)+deltaTNight)/10)); - tA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionA()[idFreq]+10 * Math.log10(nBUnit)+deltaTNight)/10)); - tB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWTractionB()[idFreq]+10 * Math.log10(nBUnit)+deltaTNight)/10)); - aA = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicA()[idFreq]+10 * Math.log10(nBUnit)+deltaTNight)/10)); - aB = 10*Math.log10(Math.pow(10,(lWRailWay.getLWAerodynamicB()[idFreq]+10 * Math.log10(nBUnit)+deltaTNight)/10)); - assertEquals(expectedValuesLWRollingN[idFreq], r , EPSILON_TEST1); - assertEquals(expectedValuesLW_Traction_A_N[idFreq], tA , EPSILON_TEST1); - assertEquals(expectedValuesL_Traction_B_N[idFreq], tB , EPSILON_TEST1); - assertEquals(expectedValuesLW_Aero_A_N[idFreq], aA , EPSILON_TEST1); - assertEquals(expectedValuesLW_Aero_B_N[idFreq], aB , EPSILON_TEST1); - - } - } -} diff --git a/noisemodelling-emission/src/test/java/org/noise_planet/noisemodelling/emission/EvaluateRoadSourceDynamicTest.java b/noisemodelling-emission/src/test/java/org/noise_planet/noisemodelling/emission/EvaluateRoadSourceDynamicTest.java deleted file mode 100644 index a9ae4bac0..000000000 --- a/noisemodelling-emission/src/test/java/org/noise_planet/noisemodelling/emission/EvaluateRoadSourceDynamicTest.java +++ /dev/null @@ -1,94 +0,0 @@ -/** - * NoiseModelling is an open-source tool designed to produce environmental noise maps on very large urban areas. It can be used as a Java library or be controlled through a user friendly web interface. - * - * This version is developed by the DECIDE team from the Lab-STICC (CNRS) and by the Mixt Research Unit in Environmental Acoustics (Université Gustave Eiffel). - * - * - * NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. - * - * Contact: contact@noise-planet.org - * - */ - -package org.noise_planet.noisemodelling.emission; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Pierre Aumond / Arnaud Can, Univ. Gustave Eiffel - */ - -public class EvaluateRoadSourceDynamicTest { - private static final double EPSILON_TEST1 = 0.1; - - @Test - public void testRoadNoise1() { - double speed = 50; - int acc = 1; - int FreqParam = 500; - double Temperature = 0; - String RoadSurface = "DEF"; - boolean Stud = true; - double Junc_dist = 200; - int Junc_type = 1; - String veh_type = "1"; - int acc_type = 1; - double LwStd = 1; - int VehId = 10; - - RoadSourceParametersDynamic rsParameters = new RoadSourceParametersDynamic(speed, acc, veh_type, acc_type, FreqParam, Temperature, RoadSurface, Stud, Junc_dist, Junc_type, LwStd, VehId); - rsParameters.setSlopePercentage(0); - rsParameters.setCoeffVer(2); - assertEquals(91.66, EvaluateRoadSourceDynamic.evaluate(rsParameters), EPSILON_TEST1); - } - - @Test - public void testRoadNoise2_speed0() { - double speed = 0; - int acc = 1; - int FreqParam = 500; - double Temperature = 0; - String RoadSurface = "DEF"; - boolean Stud = false; - double Junc_dist = 200; - int Junc_type = 1; - String veh_type = "3"; - int acc_type = 1; - double LwStd = 1; - int VehId = 10; - RoadSourceParametersDynamic rsParameters = new RoadSourceParametersDynamic(speed, acc, veh_type, acc_type, FreqParam, Temperature, RoadSurface, Stud, Junc_dist, Junc_type, LwStd, VehId); - rsParameters.setSlopePercentage(0); - assertEquals(100.08, EvaluateRoadSourceDynamic.evaluate(rsParameters), EPSILON_TEST1); - } - - - @Test - public void testRoadNoise3_speed60() { - int FreqParam = 8000; - //int[] f = {63, 125, 250, 500, 1000, 2000, 4000, 8000}; - //for (int FreqParam : f) { - double speed = 60; - int acc = 0; - - double Temperature = 15; - String RoadSurface = "NL08"; - boolean Stud = false; - double Junc_dist = 200; - int Junc_type = 1; - String veh_type = "1"; - int acc_type = 1; - double LwStd = 0; - int VehId = 1; - RoadSourceParametersDynamic rsParameters = new RoadSourceParametersDynamic(speed, acc, veh_type, acc_type, FreqParam, Temperature, RoadSurface, Stud, Junc_dist, Junc_type, LwStd, VehId); - rsParameters.setSlopePercentage(0); - - assertEquals(78.62, EvaluateRoadSourceDynamic.evaluate(rsParameters), EPSILON_TEST1); - // } - } - - - - -} \ No newline at end of file diff --git a/noisemodelling-emission/src/test/java/org/noise_planet/noisemodelling/emission/directivity/DiscreteDirectivitySphereTest.java b/noisemodelling-emission/src/test/java/org/noise_planet/noisemodelling/emission/directivity/DiscreteDirectivitySphereTest.java new file mode 100644 index 000000000..c63538e00 --- /dev/null +++ b/noisemodelling-emission/src/test/java/org/noise_planet/noisemodelling/emission/directivity/DiscreteDirectivitySphereTest.java @@ -0,0 +1,82 @@ +/** + * NoiseModelling is a library capable of producing noise maps. It can be freely used either for research and education, as well as by experts in a professional use. + *

+ * NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. + *

+ * Official webpage : http://noise-planet.org/noisemodelling.html + * Contact: contact@noise-planet.org + */ + +package org.noise_planet.noisemodelling.emission.directivity; + +import org.junit.Test; +import org.noise_planet.noisemodelling.emission.LineSource; +import org.noise_planet.noisemodelling.emission.railway.cnossos.RailWayCnossosParameters; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; + +/** + * Test the Directivity Sphere classes + * @author Nicolas Fortin, Université Gustave Eiffel + */ + +public class DiscreteDirectivitySphereTest { + final static double[] freqTest = new double[]{125, 250, 500, 1000, 2000, 4000, 8000, 16000}; + + @Test + public void testInsert() { + DiscreteDirectivitySphere d = new DiscreteDirectivitySphere(1, freqTest); + + RailWayCnossosParameters.RailwayDirectivitySphere att = new RailWayCnossosParameters.RailwayDirectivitySphere(new LineSource("TRACTIONB")); + + for (int yaw = 0; yaw < 360; yaw += 5) { + float phi = (float) Math.toRadians(yaw); + for (int pitch = -85; pitch < 90; pitch += 5) { + float theta = (float) Math.toRadians(pitch); + double[] attSpectrum = new double[freqTest.length]; + for (int idFreq = 0; idFreq < freqTest.length; idFreq++) { + attSpectrum[idFreq] = att.getAttenuation(freqTest[idFreq], phi, theta); + } + d.addDirectivityRecord(theta, phi, + attSpectrum); + } + } + + // test nearest neighbors + + assertEquals(new DiscreteDirectivitySphere.DirectivityRecord((float) Math.toRadians(30), + (float) Math.toRadians(25), null), + d.getRecord((float) Math.toRadians(31), (float) Math.toRadians(26), 0)); + + assertEquals(new DiscreteDirectivitySphere.DirectivityRecord((float) Math.toRadians(85), + (float) Math.toRadians(0), null), + d.getRecord((float) Math.toRadians(88), (float) Math.toRadians(358), 0)); + + assertEquals(new DiscreteDirectivitySphere.DirectivityRecord((float) Math.toRadians(-85), + (float) Math.toRadians(0), null), + d.getRecord((float) Math.toRadians(-89), (float) Math.toRadians(2), 0)); + + + // Test bilinear interpolation + DiscreteDirectivitySphere.DirectivityRecord r = d.getRecord((float) Math.toRadians(26), + (float) Math.toRadians(31), 1); + assertEquals(new DiscreteDirectivitySphere.DirectivityRecord((float) Math.toRadians(26), + (float) Math.toRadians(31), null), r); + assertArrayEquals(new double[]{-5.63, -5.63, -5.63, -5.63, -5.63, -5.63, -5.63, -5.63}, r.getAttenuation(), + 0.1); + + + assertEquals(-5.63, d.getAttenuation(freqTest[0], (float) Math.toRadians(31), + (float) Math.toRadians(26)), 0.1); + assertEquals(-5.63, d.getAttenuation(freqTest[1], (float) Math.toRadians(31), + (float) Math.toRadians(26)), 0.1); + assertEquals(-5.63, d.getAttenuation(freqTest[1] + 1, (float) Math.toRadians(31), + (float) Math.toRadians(26)), 0.1); + assertEquals(-5.63, d.getAttenuation(freqTest[0] - 1, (float) Math.toRadians(31), + (float) Math.toRadians(26)), 0.1); + assertEquals(-5.63, d.getAttenuation(freqTest[freqTest.length - 1] + 1, (float) Math.toRadians(31), + (float) Math.toRadians(26)), 0.1); + } + +} \ No newline at end of file diff --git a/noisemodelling-emission/src/test/java/org/noise_planet/noisemodelling/emission/railway/RailwayCnossosTest.java b/noisemodelling-emission/src/test/java/org/noise_planet/noisemodelling/emission/railway/RailwayCnossosTest.java new file mode 100644 index 000000000..2b3dc07ef --- /dev/null +++ b/noisemodelling-emission/src/test/java/org/noise_planet/noisemodelling/emission/railway/RailwayCnossosTest.java @@ -0,0 +1,1036 @@ +/** + * NoiseModelling is a library capable of producing noise maps. It can be freely used either for research and education, as well as by experts in a professional use. + *

+ * NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. + *

+ * Official webpage : http://noise-planet.org/noisemodelling.html + * Contact: contact@noise-planet.org + */ + +package org.noise_planet.noisemodelling.emission.railway; + +import org.junit.Test; +import org.noise_planet.noisemodelling.emission.railway.cnossos.RailwayCnossos; +import org.noise_planet.noisemodelling.emission.railway.cnossos.RailwayTrackCnossosParameters; +import org.noise_planet.noisemodelling.emission.railway.cnossos.RailwayVehicleCnossosParameters; + +import java.io.IOException; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +/** + * Test the Railway model CNOSSOS as implemented in RailwayCnossos.java + * @author Adrien Le Bellec - univ Gustave eiffel + * @author Olivier Chiello, Univ Gustave Eiffel + */ + +public class RailwayCnossosTest { + private static final double EPSILON_TEST1 = 0.0001; + RailwayCnossos railwayCnossos = new RailwayCnossos(); + + @Test(expected = IllegalArgumentException.class) + public void testUnknownVehicle() throws IOException { + + railwayCnossos.setVehicleDataFile("RailwayVehiclesNMPB.json"); + railwayCnossos.setTrainSetDataFile("RailwayTrainsets.json"); + railwayCnossos.setRailwayDataFile("RailwayCnossosSNCF_2021.json"); + + + String vehCat = "notsupported"; + + double vehicleSpeed = 80; + int rollingCondition = 0; + double idlingTime = 0; + + int nTracks = 2; + int trackTransfer = 7; + int railRoughness = 3; + int impactNoise = 1; + int bridgeTransfert = 0; + int curvature = 0; + boolean isTunnel = false; + + double vMaxInfra = 160; + double vehicleCommercial = 120; + + double vehiclePerHour = (1000 * vehicleSpeed); //for one vehicle + + RailwayVehicleCnossosParameters vehicleParameters = new RailwayVehicleCnossosParameters(vehCat, vehicleSpeed, vehiclePerHour, rollingCondition, idlingTime); + vehicleParameters.setFileVersion("EU"); + RailwayTrackCnossosParameters trackParameters = new RailwayTrackCnossosParameters(vMaxInfra, trackTransfer, railRoughness, + impactNoise, bridgeTransfert, curvature, vehicleCommercial, isTunnel, nTracks); + railwayCnossos.evaluate(vehicleParameters, trackParameters); + } + + @Test + public void Test_Cnossos_Rail_emission_section_1() throws IOException { + + railwayCnossos.setVehicleDataFile("RailwayVehiclesCnossos_2015.json"); + railwayCnossos.setTrainSetDataFile("RailwayTrainsets.json"); + railwayCnossos.setRailwayDataFile("RailwayCnossosEU_2020.json"); + + String vehCat = "SNCF-BB66400"; + + double vehicleSpeed = 80; + int rollingCondition = 0; + double idlingTime = 0; + + int nTracks = 2; + int trackTransfer = 7; + int railRoughness = 3; + int impactNoise = 1; + int bridgeTransfert = 0; + int curvature = 0; + boolean isTunnel = false; + + double vMaxInfra = 160; + double vehicleCommercial = 120; + + double vehiclePerHour = (1000 * vehicleSpeed); //for one vehicle + + double[] expectedValuesLWRolling = new double[]{98.6704, 99.6343, 101.5298, 102.8865, 100.3316, 99.6011, 100.4072, 105.7262, 107.2207, 108.4848, 109.4223, 110.1035, 111.8706, 111.4956, 108.5828, 104.2152, 106.5525, 105.2982, 103.1594, 100.7729, 101.1764, 100.6417, 100.6287, 102.1869}; + double[] expectedValuesLWTractionA = new double[]{98.8613, 94.7613, 92.5613, 94.5613, 92.7613, 92.7613, 92.9613, 94.7613, 94.5613, 95.6613, 95.5613, 98.5613, 95.1613, 95.0613, 95.0613, 94.0613, 94.0613, 99.3613, 92.4613, 89.4613, 86.9613, 84.0613, 81.4613, 79.1613}; + double[] expectedValuesLWTractionB = new double[]{103.1613, 99.9613, 95.4613, 93.9613, 93.2613, 93.5613, 92.8613, 92.6613, 92.3613, 92.7613, 92.7613, 96.7613, 92.6613, 92.9613, 92.8613, 93.0613, 93.1613, 98.2613, 91.4613, 88.6613, 85.9613, 83.3613, 80.8613, 78.6613}; + double[] expectedValuesLWAerodynamicA = new double[]{-99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99}; + double[] expectedValuesLWAerodynamicB = new double[]{-99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99}; + double[] expectedValuesLWBridge = new double[]{-99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99}; + + RailwayVehicleCnossosParameters vehicleParameters = new RailwayVehicleCnossosParameters(vehCat, vehicleSpeed, vehiclePerHour, rollingCondition, idlingTime); + RailwayTrackCnossosParameters trackParameters = new RailwayTrackCnossosParameters(vMaxInfra, trackTransfer, railRoughness, + impactNoise, bridgeTransfert, curvature, vehicleCommercial, isTunnel, nTracks); + RailWayParameters lWRailWay = railwayCnossos.evaluate(vehicleParameters, trackParameters); + + for (int idFreq = 0; idFreq < 24; idFreq++) { + assertEquals(expectedValuesLWRolling[idFreq], lWRailWay.getRailwaySourceList().get("ROLLING").getlW()[idFreq], EPSILON_TEST1); + assertEquals(expectedValuesLWTractionA[idFreq], lWRailWay.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq], EPSILON_TEST1); + assertEquals(expectedValuesLWTractionB[idFreq], lWRailWay.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq], EPSILON_TEST1); + assertEquals(expectedValuesLWAerodynamicA[idFreq], lWRailWay.getRailwaySourceList().get("AERODYNAMICA").getlW()[idFreq], EPSILON_TEST1); + assertEquals(expectedValuesLWAerodynamicB[idFreq], lWRailWay.getRailwaySourceList().get("AERODYNAMICB").getlW()[idFreq], EPSILON_TEST1); + assertEquals(expectedValuesLWBridge[idFreq], lWRailWay.getRailwaySourceList().get("BRIDGE").getlW()[idFreq], EPSILON_TEST1); + } + } + + @Test + public void Test_Cnossos_Rail_emission_section_2() throws IOException { + + railwayCnossos.setVehicleDataFile("RailwayVehiclesCnossos_2015.json"); + railwayCnossos.setTrainSetDataFile("RailwayTrainsets.json"); + railwayCnossos.setRailwayDataFile("RailwayCnossosEU_2020.json"); + + String vehCat = "SNCF-BB66400"; + + double vehicleSpeed = 80; + int rollingCondition = 0; + double idlingTime = 0; + + int nTracks = 2; + int trackTransfer = 7; + int railRoughness = 3; + int impactNoise = 3; + int bridgeTransfert = 0; + int curvature = 0; + boolean isTunnel = false; + + double vMaxInfra = 160; + double vehicleCommercial = 120; + + double vehiclePerHour = (1000 * vehicleSpeed); //for one vehicle + + RailWayParameters lWRailWay ; + + double[] expectedValuesLWRolling = new double[]{100.8970, 101.8434, 104.6603, 107.0239, 104.6611, 104.0827, 105.2341, 109.9994, 110.1740, 110.1183, 110.2914, 110.7347, 112.4299, 111.8073, 108.7535, 104.3038, 106.6040, 105.3350, 103.1827, 100.7862, 101.1828, 100.6431, 100.6290, 102.1868}; + RailwayVehicleCnossosParameters vehicleParameters = new RailwayVehicleCnossosParameters(vehCat, vehicleSpeed, vehiclePerHour, rollingCondition, idlingTime); + + RailwayTrackCnossosParameters trackParameters = new RailwayTrackCnossosParameters(vMaxInfra, trackTransfer, railRoughness, + impactNoise, bridgeTransfert, curvature, vehicleCommercial, isTunnel, nTracks); + lWRailWay = railwayCnossos.evaluate(vehicleParameters, trackParameters); + + for (int idFreq = 0; idFreq < 24; idFreq++) { + assertEquals(expectedValuesLWRolling[idFreq], lWRailWay.getRailwaySourceList().get("ROLLING").getlW()[idFreq], EPSILON_TEST1); + + } + } + + @Test + public void Test_Cnossos_Rail_emission_section_3() throws IOException { + + railwayCnossos.setVehicleDataFile("RailwayVehiclesCnossos_2015.json"); + railwayCnossos.setTrainSetDataFile("RailwayTrainsets.json"); + railwayCnossos.setRailwayDataFile("RailwayCnossosEU_2020.json"); + + String vehCat = "SNCF-BB66400"; + + double vehicleSpeed = 80; + int rollingCondition = 0; + double idlingTime = 0; + + int nTracks = 4; + int trackTransfer = 7; + int railRoughness = 3; + int impactNoise = 1; + int bridgeTransfert = 3; + int curvature = 0; + boolean isTunnel = false; + + double vMaxInfra = 160; + double vehicleCommercial = 120; + + RailWayParameters lWRailWay ; + + double vehiclePerHour = (1000 * vehicleSpeed); //for one vehicle + + double[] expectedValuesLWRolling = new double[]{98.6704, 99.6343, 101.5298, 102.8865, 100.3316, 99.6011, 100.4072, 105.7262, 107.2207, 108.4848, 109.4223, 110.1035, 111.8706, 111.4956, 108.5828, 104.2152, 106.5525, 105.2982, 103.1594, 100.7729, 101.1764, 100.6417, 100.6287, 102.1869}; + double[] expectedValuesLWBridge = new double[]{108.4579, 109.4015, 111.344, 112.4959, 111.1415, 110.9017, 105.8236, 109.7833, 111.592, 115.0733, 116.7548, 116.8658, 117.8667, 116.2709, 113.2686, 102.3774, 96.9285, 95.8390, 85.6001, 75.2583, 70.6990, 62.9177, 57.9386, 54.5294}; + + RailwayVehicleCnossosParameters vehicleParameters = new RailwayVehicleCnossosParameters(vehCat, vehicleSpeed, vehiclePerHour, rollingCondition, idlingTime); + + RailwayTrackCnossosParameters trackParameters = new RailwayTrackCnossosParameters(vMaxInfra, trackTransfer, railRoughness, + impactNoise, bridgeTransfert, curvature, vehicleCommercial, isTunnel, nTracks); + trackParameters.setFileVersion("EU"); // for bridge + + lWRailWay = railwayCnossos.evaluate(vehicleParameters, trackParameters); + + for (int idFreq = 0; idFreq < 24; idFreq++) { + + assertEquals(expectedValuesLWRolling[idFreq], lWRailWay.getRailwaySourceList().get("ROLLING").getlW()[idFreq], EPSILON_TEST1); + assertEquals(expectedValuesLWBridge[idFreq], lWRailWay.getRailwaySourceList().get("BRIDGE").getlW()[idFreq], EPSILON_TEST1); + } + + } + + + @Test + public void Test_Cnossos_Rail_emission_section_4() throws IOException { + + railwayCnossos.setVehicleDataFile("RailwayVehiclesCnossos_2015.json"); + railwayCnossos.setTrainSetDataFile("RailwayTrainsets.json"); + railwayCnossos.setRailwayDataFile("RailwayCnossosEU_2020.json"); + + String vehCat = "SNCF-BB66400"; + + double vehicleSpeed = 200; + int rollingCondition = 0; + double idlingTime = 0; + + int nTracks = 2; + int trackTransfer = 9; + int railRoughness = 3; + int impactNoise = 1; + int bridgeTransfert = 0; + int curvature = 0; + boolean isTunnel = false; + + double vMaxInfra = 200; + double vehicleCommercial = 200; + + double vehiclePerHour = (1000 * vehicleSpeed); //for one vehicle + + RailWayParameters lWRailWay = null; + double[] expectedValuesLWRolling = new double[]{98.66110, 100.5681, 104.3908, 107.5565, 106.7391, 106.4557, 105.5468, 109.3204, 108.2763, 109.2614, 111.1101, 112.5186, 117.3340, 121.3800, 123.5189, 122.9000, 126.9115, 122.9414, 117.8516, 111.8003, 107.3142, 105.8263, 103.9313, 102.2640}; + double[] expectedValuesLWTractionA = new double[]{98.8613, 94.7613, 92.5613, 94.5613, 92.7613, 92.7613, 92.9613, 94.7613, 94.5613, 95.6613, 95.5613, 98.5613, 95.1613, 95.0613, 95.0613, 94.0613, 94.0613, 99.3613, 92.4613, 89.4613, 86.9613, 84.0613, 81.4613, 79.1613}; + double[] expectedValuesLWTractionB = new double[]{103.1613, 99.96130, 95.46130, 93.96130, 93.26130, 93.56130, 92.86130, 92.66130, 92.36130, 92.76130, 92.76130, 96.76130, 92.66130, 92.96130, 92.86130, 93.06130, 93.16130, 98.26130, 91.46130, 88.66130, 85.96130, 83.36130, 80.86130, 78.6613}; + double[] expectedValuesLWAerodynamicA = new double[]{103.7732, 104.3619, 106.8712, 108.5805, 106.4589, 106.1681, 106.0774, 107.5763, 107.0650, 107.4712, 107.3712, 106.3712, 106.9712, 106.8712, 106.8712, 105.8712, 105.8712, 106.1712, 105.7403, 104.2867, 103.2811, 101.8249, 100.7712, 100.0176}; + double[] expectedValuesLWAerodynamicB = new double[]{27.9057, 29.7057, 30.2057, 28.7057, 28.0057, 28.30570, 27.60570, 27.40570, 27.10570, 27.5057, 27.5057, 27.5057, 27.4057, 27.7057, 27.6057, 96.4057, 101.5057, 101.6057, 96.80570, 28.40570, 28.70570, 29.10570, 29.60570, 30.4057}; + double[] expectedValuesLWBridge = new double[]{-99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99}; + + + RailwayVehicleCnossosParameters vehicleParameters = new RailwayVehicleCnossosParameters(vehCat, vehicleSpeed, vehiclePerHour, rollingCondition, idlingTime); + vehicleParameters.setFileVersion("EU"); + + RailwayTrackCnossosParameters trackParameters = new RailwayTrackCnossosParameters(vMaxInfra, trackTransfer, railRoughness, + impactNoise, bridgeTransfert, curvature, vehicleCommercial, isTunnel, nTracks); + lWRailWay = railwayCnossos.evaluate(vehicleParameters, trackParameters); + + for (int idFreq = 0; idFreq < 24; idFreq++) { + assertEquals(expectedValuesLWRolling[idFreq], lWRailWay.getRailwaySourceList().get("ROLLING").getlW()[idFreq], EPSILON_TEST1); + assertEquals(expectedValuesLWTractionA[idFreq], lWRailWay.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq], EPSILON_TEST1); + assertEquals(expectedValuesLWTractionB[idFreq], lWRailWay.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq], EPSILON_TEST1); + assertEquals(expectedValuesLWAerodynamicA[idFreq], lWRailWay.getRailwaySourceList().get("AERODYNAMICA").getlW()[idFreq], EPSILON_TEST1); + assertEquals(expectedValuesLWAerodynamicB[idFreq], lWRailWay.getRailwaySourceList().get("AERODYNAMICB").getlW()[idFreq], EPSILON_TEST1); + assertEquals(expectedValuesLWBridge[idFreq], lWRailWay.getRailwaySourceList().get("BRIDGE").getlW()[idFreq], EPSILON_TEST1); + } + } + + @Test + public void Test_Cnossos_Rail_emission_section_5() throws IOException { + + railwayCnossos.setVehicleDataFile("RailwayVehiclesCnossos_2015.json"); + railwayCnossos.setTrainSetDataFile("RailwayTrainsets.json"); + railwayCnossos.setRailwayDataFile("RailwayCnossosEU_2020.json"); + + String vehCat; + double vehicleSpeed; + + String vehCat1 = "SNCF-BB66400"; + double vehicleSpeed1 = 80; + double tDay1 = 0.4; + double vehiclePerHour = tDay1; + + String vehCat2 = "RMR-Cat-1"; + double vehicleSpeed2 = 120; + + String vehCat3 = "RMR-Cat-9-a"; + double vehicleSpeed3 = 100; + + int rollingCondition = 0; + double idlingTime = 0; + + int nTracks = 2; + int trackTransfer = 7; + int railRoughness = 4; + int impactNoise = 1; + int bridgeTrasnfert = 0; + int curvature = 0; + boolean isTunnel = false; + + double vMaxInfra = 160; + double vehicleCommercial = 120; + + RailwayTrackCnossosParameters trackParameters = new RailwayTrackCnossosParameters(vMaxInfra, trackTransfer, railRoughness, + impactNoise, bridgeTrasnfert, curvature, vehicleCommercial, isTunnel, nTracks); + + double[] expectedValuesLWRolling; + double[] expectedValuesLWRolling1 = new double[]{97.1163, 95.9284, 97.6691, 99.2991, 97.1440, 97.4508, 99.2167, 105.2093, 107.0484, 108.4798, 109.5263, 110.2781, 112.0743, 111.6404, 108.6516, 104.1867, 106.4632, 105.1549, 102.952, 100.4917, 100.9441, 100.4491, 100.4702, 102.0818}; + double[] expectedValuesLWRolling2 = new double[]{102.3819, 101.3591, 102.0322, 102.2927, 100.1769, 99.86140, 101.3709, 104.9785, 104.7817, 105.1695, 107.2118, 111.4597, 117.2867, 118.8195, 117.2068, 114.3600, 112.0048, 109.4634, 105.5892, 104.2252, 101.6110, 100.1356, 100.5837, 100.3448}; + double[] expectedValuesLWRolling3 = new double[]{100.0997, 98.93480, 99.69780, 100.8341, 98.85870, 98.98000, 100.6952, 104.5915, 105.3080, 106.4464, 108.5190, 111.5829, 115.6512, 115.9799, 113.7622, 110.2023, 107.1972, 105.9335, 104.4154, 102.0925, 100.1482, 100.1865, 99.95900, 100.3303}; + + for (int i = 1; i < 4; i++) { + switch (i) { + case 1: + vehCat = vehCat1; + vehicleSpeed = vehicleSpeed1; + vehiclePerHour = (1000 * vehicleSpeed); + expectedValuesLWRolling = expectedValuesLWRolling1; + break; + case 2: + vehCat = vehCat2; + vehicleSpeed = vehicleSpeed2; + vehiclePerHour = (1000 * vehicleSpeed); + expectedValuesLWRolling = expectedValuesLWRolling2; + break; + case 3: + vehCat = vehCat3; + vehicleSpeed = vehicleSpeed3; + vehiclePerHour = (int) (1000 * vehicleSpeed); + expectedValuesLWRolling = expectedValuesLWRolling3; + break; + default: + vehCat = ""; + vehicleSpeed = 0; + vehiclePerHour = (1000 * vehicleSpeed); + expectedValuesLWRolling = new double[]{-99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, -99}; + } + + RailWayParameters lWRailWay = null; + RailwayVehicleCnossosParameters vehicleParameters = new RailwayVehicleCnossosParameters(vehCat, vehicleSpeed, vehiclePerHour, rollingCondition, idlingTime); + vehicleParameters.setFileVersion("EU"); + + lWRailWay = railwayCnossos.evaluate(vehicleParameters, trackParameters); + + + for (int idFreq = 0; idFreq < 24; idFreq++) { + assertEquals(expectedValuesLWRolling[idFreq], lWRailWay.getRailwaySourceList().get("ROLLING").getlW()[idFreq], EPSILON_TEST1); + } + } + + } + + @Test + public void Test_Cnossos_Rail_emission_section_6() throws IOException { + + railwayCnossos.setVehicleDataFile("RailwayVehiclesCnossos.json"); + railwayCnossos.setTrainSetDataFile("RailwayTrainsets.json"); + railwayCnossos.setRailwayDataFile("RailwayCnossosSNCF_2021.json"); + + + String vehCat = "SNCF2"; + + double vehicleSpeed = 80; + int rollingCondition = 0; + double idlingTime = 0; + + // Set : Take into account the number of units + double nBUnit = 2; + + int nTracks = 2; + int trackTransfer = 5; + int railRoughness = 1; + int impactNoise = 0; + int bridgeTransfert = 0; + int curvature = 0; + boolean isTunnel = false; + + double vMaxInfra = 160; + double vehicleCommercial = 120; + + double tDay = 1; + double vehiclePerHour = (1000 * vehicleSpeed); //for one vehicle + double deltaL0 = 10 * Math.log10(vehiclePerHour * nTracks); + + double deltaTDay = 10 * Math.log10(tDay) - deltaL0; + // + + + double[] expectedValuesLWRolling = new double[]{48.5606, 49.5910, 51.5763, 56.4920, 55.5831, 55.4623, 55.2207, 56.4663, 56.3912, + 56.7350, 56.4837, 59.9648, 62.8745, 62.6585, 59.6990, 57.3252, 59.7649, 61.1898, 60.5615, 58.7027, 55.6686, 49.3786, 48.0600, 45.9195}; + RailwayVehicleCnossosParameters vehicleParameters = new RailwayVehicleCnossosParameters(vehCat, vehicleSpeed, vehiclePerHour, rollingCondition, idlingTime); + vehicleParameters.setFileVersion("FR"); + RailwayTrackCnossosParameters trackParameters = new RailwayTrackCnossosParameters(vMaxInfra, trackTransfer, railRoughness, + impactNoise, bridgeTransfert, curvature, vehicleCommercial, isTunnel, nTracks); + RailWayParameters lWRailWay = railwayCnossos.evaluate(vehicleParameters, trackParameters); + + double[] lWRolling = lWRailWay.getRailwaySourceList().get("ROLLING").getlW(); + for (int idFreq = 0; idFreq < 24; idFreq++) { + // Compute sound powers per track meter + + lWRolling[idFreq] = 10 * Math.log10(Math.pow(10, (lWRolling[idFreq] + 10 * Math.log10(nBUnit) + deltaTDay) / 10)); + assertEquals(expectedValuesLWRolling[idFreq], lWRolling[idFreq], EPSILON_TEST1); + } + } + + @Test + public void Test_Cnossos_Rail_emission_OC1() throws IOException { + + railwayCnossos.setVehicleDataFile("RailwayVehiclesCnossos.json"); + railwayCnossos.setTrainSetDataFile("RailwayTrainsets.json"); + railwayCnossos.setRailwayDataFile("RailwayCnossosSNCF_2021.json"); + + String vehCat = "SNCF2"; + double vehicleSpeed = 80; + int rollingCondition = 0; + double idlingTime = 0; + double nBUnit = 2; + double tDay = 1; + double tEvening = 1; + double tNight = 1; + + int nTracks = 2; + int trackTransfer = 5; + int railRoughness = 1; + int impactNoise = 0; + int curvature = 0; + double vMaxInfra = 160; + double vehicleCommercial = 120; + boolean isTunnel = false; + int bridgeTransfert = 0; + + + // Compute deltaT + double vehiclePerHour = (1000 * vehicleSpeed); //for one vehicle + double deltaL0 = 10 * Math.log10(vehiclePerHour * nTracks); + double deltaTDay = 10 * Math.log10(tDay) - deltaL0; + double deltaTEvening = 10 * Math.log10(tEvening) - deltaL0; + double deltaTNight = 10 * Math.log10(tNight) - deltaL0; + + // Expected values + double[] expectedValuesLWRollingD = new double[]{48.5605583070706, 49.591094876553, 51.5763357483898, 56.4920337262433, 55.5830577481227, 55.4623526520535, 55.2207102517505, 56.4663370258577, 56.3912193484322, 56.7349538148708, 56.4837006351883, 59.9647735129824, 62.8744986704598, 62.6584506699844, 59.6990085689524, 57.3251971450722, 59.7649235057108, 61.1897948776294, 60.5615433617675, 58.7027221858109, 55.6685855421802, 49.378644576175, 48.0600152459358, 45.9195251325526}; + double[] expectedValuesLWRollingE = new double[]{48.5605583070706, 49.591094876553, 51.5763357483898, 56.4920337262433, 55.5830577481227, 55.4623526520535, 55.2207102517505, 56.4663370258577, 56.3912193484322, 56.7349538148708, 56.4837006351883, 59.9647735129824, 62.8744986704598, 62.6584506699844, 59.6990085689524, 57.3251971450722, 59.7649235057108, 61.1897948776294, 60.5615433617675, 58.7027221858109, 55.6685855421802, 49.378644576175, 48.0600152459358, 45.9195251325526}; + double[] expectedValuesLWRollingN = new double[]{48.5605583070706, 49.591094876553, 51.5763357483898, 56.4920337262433, 55.5830577481227, 55.4623526520535, 55.2207102517505, 56.4663370258577, 56.3912193484322, 56.7349538148708, 56.4837006351883, 59.9647735129824, 62.8744986704598, 62.6584506699844, 59.6990085689524, 57.3251971450722, 59.7649235057108, 61.1897948776294, 60.5615433617675, 58.7027221858109, 55.6685855421802, 49.378644576175, 48.0600152459358, 45.9195251325526}; + + double[] expectedValuesLW_Traction_A_D = new double[]{49.8691001300806, 49.7691001300806, 49.6691001300806, 50.1691001300806, 47.0691001300806, 54.1691001300806, 50.7691001300806, 44.2691001300806, 46.8691001300806, 47.0691001300806, 45.6691001300806, 44.9691001300806, 43.4691001300806, 44.5691001300806, 41.5691001300806, 41.1691001300806, 38.9691001300806, 37.3691001300806, 36.4691001300806, 35.3691001300806, 31.7691001300806, 27.6691001300806, 22.4691001300806, 20.4691001300806}; + double[] expectedValuesLW_Traction_A_E = new double[]{49.8691001300806, 49.7691001300806, 49.6691001300806, 50.1691001300806, 47.0691001300806, 54.1691001300806, 50.7691001300806, 44.2691001300806, 46.8691001300806, 47.0691001300806, 45.6691001300806, 44.9691001300806, 43.4691001300806, 44.5691001300806, 41.5691001300806, 41.1691001300806, 38.9691001300806, 37.3691001300806, 36.4691001300806, 35.3691001300806, 31.7691001300806, 27.6691001300806, 22.4691001300806, 20.4691001300806}; + double[] expectedValuesLW_Traction_A_N = new double[]{49.8691001300806, 49.7691001300806, 49.6691001300806, 50.1691001300806, 47.0691001300806, 54.1691001300806, 50.7691001300806, 44.2691001300806, 46.8691001300806, 47.0691001300806, 45.6691001300806, 44.9691001300806, 43.4691001300806, 44.5691001300806, 41.5691001300806, 41.1691001300806, 38.9691001300806, 37.3691001300806, 36.4691001300806, 35.3691001300806, 31.7691001300806, 27.6691001300806, 22.4691001300806, 20.4691001300806}; + + double[] expectedValuesL_Traction_B_D = new double[]{-39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572}; + double[] expectedValuesL_Traction_B_E = new double[]{-39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572}; + double[] expectedValuesL_Traction_B_N = new double[]{-39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572}; + + // Compute + RailwayVehicleCnossosParameters vehicleParameters = new RailwayVehicleCnossosParameters(vehCat, vehicleSpeed, vehiclePerHour, rollingCondition, idlingTime); + vehicleParameters.setFileVersion("FR"); + RailwayTrackCnossosParameters trackParameters = new RailwayTrackCnossosParameters(vMaxInfra, trackTransfer, railRoughness, + impactNoise, bridgeTransfert, curvature, vehicleCommercial, isTunnel, nTracks); + RailWayParameters lWRailWay = railwayCnossos.evaluate(vehicleParameters, trackParameters); + + for (int idFreq = 0; idFreq < 24; idFreq++) { + + //Day + double rolling = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTDay) / 10)); + double tractionA = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTDay) / 10)); + double tractionB = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTDay) / 10)); + assertEquals(expectedValuesLWRollingD[idFreq], rolling, EPSILON_TEST1); + assertEquals(expectedValuesLW_Traction_A_D[idFreq], tractionA, EPSILON_TEST1); + assertEquals(expectedValuesL_Traction_B_D[idFreq], tractionB, EPSILON_TEST1); + + //Evening + rolling = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTEvening) / 10)); + tractionA = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTEvening) / 10)); + tractionB = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTEvening) / 10)); + assertEquals(expectedValuesLWRollingE[idFreq], rolling, EPSILON_TEST1); + assertEquals(expectedValuesLW_Traction_A_E[idFreq], tractionA, EPSILON_TEST1); + assertEquals(expectedValuesL_Traction_B_E[idFreq], tractionB, EPSILON_TEST1); + + //Night + rolling = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTNight) / 10)); + tractionA = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTNight) / 10)); + tractionB = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTNight) / 10)); + assertEquals(expectedValuesLWRollingN[idFreq], rolling, EPSILON_TEST1); + assertEquals(expectedValuesLW_Traction_A_N[idFreq], tractionA, EPSILON_TEST1); + assertEquals(expectedValuesL_Traction_B_N[idFreq], tractionB, EPSILON_TEST1); + } + } + + @Test + public void Test_Cnossos_Rail_emission_OC2() throws IOException { + + railwayCnossos.setVehicleDataFile("RailwayVehiclesCnossos.json"); + railwayCnossos.setTrainSetDataFile("RailwayTrainsets.json"); + railwayCnossos.setRailwayDataFile("RailwayCnossosSNCF_2021.json"); + + String vehCat = "SNCF2"; + double vehicleSpeed = 80; + int rollingCondition = 0; + double idlingTime = 0; + double nBUnit = 2; + double tDay = 1; + double tEvening = 1; + double tNight = 1; + + int nTracks = 2; + int trackTransfer = 7; + int railRoughness = 2; + int impactNoise = 1; + int curvature = 0; + double vMaxInfra = 160; + double vehicleCommercial = 120; + boolean isTunnel = false; + int bridgeTransfert = 0; + + // Compute deltaT + double vehiclePerHour = (1000 * vehicleSpeed); //for one vehicle + double deltaL0 = 10 * Math.log10(vehiclePerHour * nTracks); + double deltaTDay = 10 * Math.log10(tDay) - deltaL0; + double deltaTEvening = 10 * Math.log10(tEvening) - deltaL0; + double deltaTNight = 10 * Math.log10(tNight) - deltaL0; + + // Expected values + double[] expectedValuesLWRollingD = new double[]{43.8903627967019, 44.9655697489009, 48.9478577301374, 55.5479496503529, 55.435644216131, 56.2891894988337, 57.7651753624208, 59.8571890905986, 60.9673183839427, 61.9895897144138, 61.6677155247581, 64.860508108409, 67.7908958462555, 65.626269983869, 62.1831439289956, 59.579681366753, 61.0864098301681, 62.2076187832561, 61.491437018795, 59.6104246527745, 56.5374755835627, 50.4190128973858, 49.0315804220768, 46.7955035486733}; + double[] expectedValuesLWRollingE = new double[]{43.8903627967019, 44.9655697489009, 48.9478577301374, 55.5479496503529, 55.435644216131, 56.2891894988337, 57.7651753624208, 59.8571890905986, 60.9673183839427, 61.9895897144138, 61.6677155247581, 64.860508108409, 67.7908958462555, 65.626269983869, 62.1831439289956, 59.579681366753, 61.0864098301681, 62.2076187832561, 61.491437018795, 59.6104246527745, 56.5374755835627, 50.4190128973858, 49.0315804220768, 46.7955035486733}; + double[] expectedValuesLWRollingN = new double[]{43.8903627967019, 44.9655697489009, 48.9478577301374, 55.5479496503529, 55.435644216131, 56.2891894988337, 57.7651753624208, 59.8571890905986, 60.9673183839427, 61.9895897144138, 61.6677155247581, 64.860508108409, 67.7908958462555, 65.626269983869, 62.1831439289956, 59.579681366753, 61.0864098301681, 62.2076187832561, 61.491437018795, 59.6104246527745, 56.5374755835627, 50.4190128973858, 49.0315804220768, 46.7955035486733}; + + double[] expectedValuesLW_Traction_A_D = new double[]{49.8691001300806, 49.7691001300806, 49.6691001300806, 50.1691001300806, 47.0691001300806, 54.1691001300806, 50.7691001300806, 44.2691001300806, 46.8691001300806, 47.0691001300806, 45.6691001300806, 44.9691001300806, 43.4691001300806, 44.5691001300806, 41.5691001300806, 41.1691001300806, 38.9691001300806, 37.3691001300806, 36.4691001300806, 35.3691001300806, 31.7691001300806, 27.6691001300806, 22.4691001300806, 20.4691001300806}; + double[] expectedValuesLW_Traction_A_E = new double[]{49.8691001300806, 49.7691001300806, 49.6691001300806, 50.1691001300806, 47.0691001300806, 54.1691001300806, 50.7691001300806, 44.2691001300806, 46.8691001300806, 47.0691001300806, 45.6691001300806, 44.9691001300806, 43.4691001300806, 44.5691001300806, 41.5691001300806, 41.1691001300806, 38.9691001300806, 37.3691001300806, 36.4691001300806, 35.3691001300806, 31.7691001300806, 27.6691001300806, 22.4691001300806, 20.4691001300806}; + double[] expectedValuesLW_Traction_A_N = new double[]{49.8691001300806, 49.7691001300806, 49.6691001300806, 50.1691001300806, 47.0691001300806, 54.1691001300806, 50.7691001300806, 44.2691001300806, 46.8691001300806, 47.0691001300806, 45.6691001300806, 44.9691001300806, 43.4691001300806, 44.5691001300806, 41.5691001300806, 41.1691001300806, 38.9691001300806, 37.3691001300806, 36.4691001300806, 35.3691001300806, 31.7691001300806, 27.6691001300806, 22.4691001300806, 20.4691001300806}; + + double[] expectedValuesL_Traction_B_D = new double[]{-39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572}; + double[] expectedValuesL_Traction_B_E = new double[]{-39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572}; + double[] expectedValuesL_Traction_B_N = new double[]{-39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572, -39.030899869572}; + + // Compute + RailwayVehicleCnossosParameters vehicleParameters = new RailwayVehicleCnossosParameters(vehCat, vehicleSpeed, vehiclePerHour, rollingCondition, idlingTime); + vehicleParameters.setFileVersion("FR"); + RailwayTrackCnossosParameters trackParameters = new RailwayTrackCnossosParameters(vMaxInfra, trackTransfer, railRoughness, + impactNoise, bridgeTransfert, curvature, vehicleCommercial, isTunnel, nTracks); + RailWayParameters lWRailWay = railwayCnossos.evaluate(vehicleParameters, trackParameters); + + for (int idFreq = 0; idFreq < 24; idFreq++) { + + //Day + double rolling = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTDay) / 10)); + double tractionA = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTDay) / 10)); + double tractionB = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTDay) / 10)); + assertEquals(expectedValuesLWRollingD[idFreq], rolling, EPSILON_TEST1); + assertEquals(expectedValuesLW_Traction_A_D[idFreq], tractionA, EPSILON_TEST1); + assertEquals(expectedValuesL_Traction_B_D[idFreq], tractionB, EPSILON_TEST1); + + //Evening + rolling = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTEvening) / 10)); + tractionA = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTEvening) / 10)); + tractionB = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTEvening) / 10)); + assertEquals(expectedValuesLWRollingE[idFreq], rolling, EPSILON_TEST1); + assertEquals(expectedValuesLW_Traction_A_E[idFreq], tractionA, EPSILON_TEST1); + assertEquals(expectedValuesL_Traction_B_E[idFreq], tractionB, EPSILON_TEST1); + + //Night + rolling = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTNight) / 10)); + tractionA = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTNight) / 10)); + tractionB = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTNight) / 10)); + assertEquals(expectedValuesLWRollingN[idFreq], rolling, EPSILON_TEST1); + assertEquals(expectedValuesLW_Traction_A_N[idFreq], tractionA, EPSILON_TEST1); + assertEquals(expectedValuesL_Traction_B_N[idFreq], tractionB, EPSILON_TEST1); + + } + } + + @Test + public void Test_Cnossos_Rail_emission_OC3() throws IOException { + + railwayCnossos.setVehicleDataFile("RailwayVehiclesCnossos.json"); + railwayCnossos.setTrainSetDataFile("RailwayTrainsets.json"); + railwayCnossos.setRailwayDataFile("RailwayCnossosSNCF_2021.json"); + + String vehCat = "SNCF2"; + double vehicleSpeed = 80; + int rollingCondition = 0; + double idlingTime = 0; + double nBUnit = 2; + double tDay = 1; + double tEvening = 1; + double tNight = 1; + + int nTracks = 4; + int trackTransfer = 8; + int railRoughness = 2; + int impactNoise = 0; + int curvature = 0; + double vMaxInfra = 160; + double vehicleCommercial = 120; + boolean isTunnel = false; + int bridgeTransfert = 0; + + // Compute deltaT + double vehiclePerHour = (1000 * vehicleSpeed); //for one vehicle + double deltaL0 = 10 * Math.log10(vehiclePerHour * nTracks); + double deltaTDay = 10 * Math.log10(tDay) - deltaL0; + double deltaTEvening = 10 * Math.log10(tEvening) - deltaL0; + double deltaTNight = 10 * Math.log10(tNight) - deltaL0; + + // Expected values + double[] expectedValuesLWRollingD = new double[]{59.3823815386426, 59.7740042542256, 61.6645074704619, 66.5651015825184, 64.9236256151963, 63.9195646659437, 63.0633891427656, 63.1703959172873, 62.0842218312365, 61.5507094539991, 59.9458124597247, 62.0451549860138, 63.5063034095735, 61.62742572976, 57.591356100339, 54.8777141322954, 57.2745023554145, 58.7784762578773, 58.2320686591241, 56.3534564010822, 53.2240832593016, 46.6986552124813, 45.4591519061876, 43.3326357315674}; + double[] expectedValuesLWRollingE = new double[]{59.3823815386426, 59.7740042542256, 61.6645074704619, 66.5651015825184, 64.9236256151963, 63.9195646659437, 63.0633891427656, 63.1703959172873, 62.0842218312365, 61.5507094539991, 59.9458124597247, 62.0451549860138, 63.5063034095735, 61.62742572976, 57.591356100339, 54.8777141322954, 57.2745023554145, 58.7784762578773, 58.2320686591241, 56.3534564010822, 53.2240832593016, 46.6986552124813, 45.4591519061876, 43.3326357315674}; + double[] expectedValuesLWRollingN = new double[]{59.3823815386426, 59.7740042542256, 61.6645074704619, 66.5651015825184, 64.9236256151963, 63.9195646659437, 63.0633891427656, 63.1703959172873, 62.0842218312365, 61.5507094539991, 59.9458124597247, 62.0451549860138, 63.5063034095735, 61.62742572976, 57.591356100339, 54.8777141322954, 57.2745023554145, 58.7784762578773, 58.2320686591241, 56.3534564010822, 53.2240832593016, 46.6986552124813, 45.4591519061876, 43.3326357315674}; + + double[] expectedValuesLW_Traction_A_D = new double[]{46.8588001734408, 46.7588001734407, 46.6588001734408, 47.1588001734408, 44.0588001734407, 51.1588001734408, 47.7588001734407, 41.2588001734407, 43.8588001734408, 44.0588001734407, 42.6588001734408, 41.9588001734407, 40.4588001734407, 41.5588001734407, 38.5588001734407, 38.1588001734408, 35.9588001734407, 34.3588001734408, 33.4588001734407, 32.3588001734408, 28.7588001734407, 24.6588001734408, 19.4588001734407, 17.4588001734407}; + double[] expectedValuesLW_Traction_A_E = new double[]{46.8588001734408, 46.7588001734407, 46.6588001734408, 47.1588001734408, 44.0588001734407, 51.1588001734408, 47.7588001734407, 41.2588001734407, 43.8588001734408, 44.0588001734407, 42.6588001734408, 41.9588001734407, 40.4588001734407, 41.5588001734407, 38.5588001734407, 38.1588001734408, 35.9588001734407, 34.3588001734408, 33.4588001734407, 32.3588001734408, 28.7588001734407, 24.6588001734408, 19.4588001734407, 17.4588001734407}; + double[] expectedValuesLW_Traction_A_N = new double[]{46.8588001734408, 46.7588001734407, 46.6588001734408, 47.1588001734408, 44.0588001734407, 51.1588001734408, 47.7588001734407, 41.2588001734407, 43.8588001734408, 44.0588001734407, 42.6588001734408, 41.9588001734407, 40.4588001734407, 41.5588001734407, 38.5588001734407, 38.1588001734408, 35.9588001734407, 34.3588001734408, 33.4588001734407, 32.3588001734408, 28.7588001734407, 24.6588001734408, 19.4588001734407, 17.4588001734407}; + + double[] expectedValuesL_Traction_B_D = new double[]{-42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644}; + double[] expectedValuesL_Traction_B_E = new double[]{-42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644}; + double[] expectedValuesL_Traction_B_N = new double[]{-42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644, -42.0411998258644}; + + // Compute + RailwayVehicleCnossosParameters vehicleParameters = new RailwayVehicleCnossosParameters(vehCat, vehicleSpeed, vehiclePerHour, rollingCondition, idlingTime); + vehicleParameters.setFileVersion("FR"); + RailwayTrackCnossosParameters trackParameters = new RailwayTrackCnossosParameters(vMaxInfra, trackTransfer, railRoughness, + impactNoise, bridgeTransfert, curvature, vehicleCommercial, isTunnel, nTracks); + RailWayParameters lWRailWay = railwayCnossos.evaluate(vehicleParameters, trackParameters); + + for (int idFreq = 0; idFreq < 24; idFreq++) { + + //Day + double r = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTDay) / 10)); + double tA = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTDay) / 10)); + double tB = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTDay) / 10)); + double aA = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("AERODYNAMICA").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTDay) / 10)); + double aB = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("AERODYNAMICB").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTDay) / 10)); + assertEquals(expectedValuesLWRollingD[idFreq], r, EPSILON_TEST1); + assertEquals(expectedValuesLW_Traction_A_D[idFreq], tA, EPSILON_TEST1); + assertEquals(expectedValuesL_Traction_B_D[idFreq], tB, EPSILON_TEST1); + + //Evening + r = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTEvening) / 10)); + tA = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTEvening) / 10)); + tB = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTEvening) / 10)); + aA = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("AERODYNAMICA").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTEvening) / 10)); + aB = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("AERODYNAMICB").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTEvening) / 10)); + assertEquals(expectedValuesLWRollingE[idFreq], r, EPSILON_TEST1); + assertEquals(expectedValuesLW_Traction_A_E[idFreq], tA, EPSILON_TEST1); + assertEquals(expectedValuesL_Traction_B_E[idFreq], tB, EPSILON_TEST1); + + //Night + r = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTNight) / 10)); + tA = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTNight) / 10)); + tB = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTNight) / 10)); + aA = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("AERODYNAMICA").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTNight) / 10)); + aB = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("AERODYNAMICB").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTNight) / 10)); + assertEquals(expectedValuesLWRollingN[idFreq], r, EPSILON_TEST1); + assertEquals(expectedValuesLW_Traction_A_N[idFreq], tA, EPSILON_TEST1); + assertEquals(expectedValuesL_Traction_B_N[idFreq], tB, EPSILON_TEST1); + } + } + + @Test + public void Test_Cnossos_Rail_emission_OC4() throws IOException { + + railwayCnossos.setVehicleDataFile("RailwayVehiclesCnossos.json"); + railwayCnossos.setTrainSetDataFile("RailwayTrainsets.json"); + railwayCnossos.setRailwayDataFile("RailwayCnossosSNCF_2021.json"); + + String vehCat = "SNCF2"; + double vehicleSpeed = 80; + int rollingCondition = 0; + double idlingTime = 0; + double nBUnit = 2; + double tDay = 0.4; + double tEvening = 0.3; + double tNight = 0.25; + + int nTracks = 2; + int trackTransfer = 5; + int railRoughness = 1; + int impactNoise = 0; + int curvature = 0; + double vMaxInfra = 160; + double vehicleCommercial = 120; + boolean isTunnel = false; + int bridgeTransfert = 0; + + // Compute deltaT + double vehiclePerHour = (1000 * vehicleSpeed); //for one vehicle + double deltaL0 = 10 * Math.log10(vehiclePerHour * nTracks); + double deltaTDay = 10 * Math.log10(tDay) - deltaL0; + double deltaTEvening = 10 * Math.log10(tEvening) - deltaL0; + double deltaTNight = 10 * Math.log10(tNight) - deltaL0; + + // Expected values + double[] expectedValuesLWRollingD = new double[]{44.5811582203502, 45.6116947898327, 47.5969356616694, 52.5126336395229, 51.6036576614023, 51.4829525653331, 51.2413101650301, 52.4869369391373, 52.4118192617118, 52.7555537281504, 52.5043005484679, 55.985373426262, 58.8950985837394, 58.679050583264, 55.7196084822321, 53.3457970583518, 55.7855234189905, 57.210394790909, 56.5821432750471, 54.7233220990906, 51.6891854554598, 45.3992444894546, 44.0806151592154, 41.9401250458322}; + double[] expectedValuesLWRollingE = new double[]{43.3317708542672, 44.3623074237497, 46.3475482955864, 51.2632462734399, 50.3542702953193, 50.2335651992501, 49.9919227989471, 51.2375495730543, 51.1624318956288, 51.5061663620674, 51.2549131823849, 54.735986060179, 57.6457112176564, 57.429663217181, 54.4702211161491, 52.0964096922688, 54.5361360529075, 55.961007424826, 55.3327559089641, 53.4739347330076, 50.4397980893768, 44.1498571233716, 42.8312277931324, 40.6907376797492}; + double[] expectedValuesLWRollingN = new double[]{42.5399583937909, 43.5704949632734, 45.5557358351102, 50.4714338129637, 49.562457834843, 49.4417527387739, 49.2001103384709, 50.445737112578, 50.3706194351526, 50.7143539015912, 50.4631007219087, 53.9441735997028, 56.8538987571802, 56.6378507567048, 53.6784086556728, 51.3045972317925, 53.7443235924312, 55.1691949643497, 54.5409434484879, 52.6821222725313, 49.6479856289006, 43.3580446628953, 42.0394153326562, 39.898925219273}; + + double[] expectedValuesLW_Traction_A_D = new double[]{45.8897000433602, 45.7897000433602, 45.6897000433602, 46.1897000433602, 43.0897000433602, 50.1897000433602, 46.7897000433602, 40.2897000433602, 42.8897000433602, 43.0897000433602, 41.6897000433602, 40.9897000433602, 39.4897000433602, 40.5897000433602, 37.5897000433602, 37.1897000433602, 34.9897000433602, 33.3897000433602, 32.4897000433602, 31.3897000433602, 27.7897000433602, 23.6897000433602, 18.4897000433602, 16.4897000433602}; + double[] expectedValuesLW_Traction_A_E = new double[]{44.6403126772772, 44.5403126772772, 44.4403126772772, 44.9403126772772, 41.8403126772772, 48.9403126772772, 45.5403126772772, 39.0403126772772, 41.6403126772772, 41.8403126772772, 40.4403126772772, 39.7403126772772, 38.2403126772772, 39.3403126772772, 36.3403126772772, 35.9403126772772, 33.7403126772772, 32.1403126772772, 31.2403126772772, 30.1403126772772, 26.5403126772772, 22.4403126772772, 17.2403126772772, 15.2403126772772}; + double[] expectedValuesLW_Traction_A_N = new double[]{43.8485002168009, 43.7485002168009, 43.6485002168009, 44.1485002168009, 41.0485002168009, 48.1485002168009, 44.7485002168009, 38.2485002168009, 40.8485002168009, 41.0485002168009, 39.6485002168009, 38.9485002168009, 37.4485002168009, 38.5485002168009, 35.5485002168009, 35.1485002168009, 32.9485002168009, 31.3485002168009, 30.4485002168009, 29.3485002168009, 25.7485002168009, 21.6485002168009, 16.4485002168009, 14.4485002168009}; + + double[] expectedValuesL_Traction_B_D = new double[]{-43.0102999557712, -43.0102999557712, -43.0102999557712, -43.0102999557712, -43.0102999557712, -43.0102999557712, -43.0102999557712, -43.0102999557712, -43.0102999557712, -43.0102999557712, -43.0102999557712, -43.0102999557712, -43.0102999557712, -43.0102999557712, -43.0102999557712, -43.0102999557712, -43.0102999557712, -43.0102999557712, -43.0102999557712, -43.0102999557712, -43.0102999557712, -43.0102999557712, -43.0102999557712, -43.0102999557712}; + double[] expectedValuesL_Traction_B_E = new double[]{-44.2596873215647, -44.2596873215647, -44.2596873215647, -44.2596873215647, -44.2596873215647, -44.2596873215647, -44.2596873215647, -44.2596873215647, -44.2596873215647, -44.2596873215647, -44.2596873215647, -44.2596873215647, -44.2596873215647, -44.2596873215647, -44.2596873215647, -44.2596873215647, -44.2596873215647, -44.2596873215647, -44.2596873215647, -44.2596873215647, -44.2596873215647, -44.2596873215647, -44.2596873215647, -44.2596873215647}; + double[] expectedValuesL_Traction_B_N = new double[]{-45.0514997818093, -45.0514997818093, -45.0514997818093, -45.0514997818093, -45.0514997818093, -45.0514997818093, -45.0514997818093, -45.0514997818093, -45.0514997818093, -45.0514997818093, -45.0514997818093, -45.0514997818093, -45.0514997818093, -45.0514997818093, -45.0514997818093, -45.0514997818093, -45.0514997818093, -45.0514997818093, -45.0514997818093, -45.0514997818093, -45.0514997818093, -45.0514997818093, -45.0514997818093, -45.0514997818093}; + + // Compute + RailwayVehicleCnossosParameters vehicleParameters = new RailwayVehicleCnossosParameters(vehCat, vehicleSpeed, vehiclePerHour, rollingCondition, idlingTime); + vehicleParameters.setFileVersion("FR"); + RailwayTrackCnossosParameters trackParameters = new RailwayTrackCnossosParameters(vMaxInfra, trackTransfer, railRoughness, + impactNoise, bridgeTransfert, curvature, vehicleCommercial, isTunnel, nTracks); + RailWayParameters lWRailWay = railwayCnossos.evaluate(vehicleParameters, trackParameters); + + for (int idFreq = 0; idFreq < 24; idFreq++) { + + //Day + double r = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTDay) / 10)); + double tA = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTDay) / 10)); + double tB = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTDay) / 10)); + double aA = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("AERODYNAMICA").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTDay) / 10)); + double aB = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("AERODYNAMICB").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTDay) / 10)); + assertEquals(expectedValuesLWRollingD[idFreq], r, EPSILON_TEST1); + assertEquals(expectedValuesLW_Traction_A_D[idFreq], tA, EPSILON_TEST1); + assertEquals(expectedValuesL_Traction_B_D[idFreq], tB, EPSILON_TEST1); + + //Evening + r = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTEvening) / 10)); + tA = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTEvening) / 10)); + tB = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTEvening) / 10)); + aA = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("AERODYNAMICA").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTEvening) / 10)); + aB = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("AERODYNAMICB").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTEvening) / 10)); + assertEquals(expectedValuesLWRollingE[idFreq], r, EPSILON_TEST1); + assertEquals(expectedValuesLW_Traction_A_E[idFreq], tA, EPSILON_TEST1); + assertEquals(expectedValuesL_Traction_B_E[idFreq], tB, EPSILON_TEST1); + + //Night + r = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTNight) / 10)); + tA = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTNight) / 10)); + tB = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTNight) / 10)); + aA = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("AERODYNAMICA").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTNight) / 10)); + aB = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("AERODYNAMICB").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTNight) / 10)); + assertEquals(expectedValuesLWRollingN[idFreq], r, EPSILON_TEST1); + assertEquals(expectedValuesLW_Traction_A_N[idFreq], tA, EPSILON_TEST1); + assertEquals(expectedValuesL_Traction_B_N[idFreq], tB, EPSILON_TEST1); + + } + } + + @Test + public void Test_Cnossos_Rail_emission_OC5() throws IOException { + + railwayCnossos.setVehicleDataFile("RailwayVehiclesCnossos.json"); + railwayCnossos.setTrainSetDataFile("RailwayTrainsets.json"); + railwayCnossos.setRailwayDataFile("RailwayCnossosSNCF_2021.json"); + + // TGV-D-U2 + String vehCat1 = "SNCF2"; + double vehicleSpeed1 = 80; + int rollingCondition1 = 0; + double idlingTime1 = 0; + double nBUnit1 = 2; + double tDay1 = 0.4; + double tEvening1 = 0.3; + double tNight1 = 0.25; + + // Corail + String vehCat2 = "SNCF6"; + double vehicleSpeed2 = 120; + int rollingCondition2 = 0; + double idlingTime2 = 0; + double nBUnit2 = 1; + double tDay2 = 0.5; + double tEvening2 = 0.5; + double tNight2 = 0.2; + + String vehCat3 = "SNCF73"; + double vehicleSpeed3 = 120; + int rollingCondition3 = 0; + double idlingTime3 = 0; + double nBUnit3 = 9; + double tDay3 = 0.5; + double tEvening3 = 0.5; + double tNight3 = 0.2; + + // V2N Train + String vehCat4 = "SNCF8"; + double vehicleSpeed4 = 100; + int rollingCondition4 = 0; + double idlingTime4 = 0; + double nBUnit4 = 1; + double tDay4 = 0.2; + double tEvening4 = 0.3; + double tNight4 = 0.7; + + String vehCat5 = "SNCF69"; + double vehicleSpeed5 = 100; + int rollingCondition5 = 0; + double idlingTime5 = 0; + double nBUnit5 = 4; + double tDay5 = 0.2; + double tEvening5 = 0.3; + double tNight5 = 0.7; + + // Section + int nTracks = 2; + int trackTransfer = 7; + int railRoughness = 1; + int impactNoise = 0; + int curvature = 0; + double vMaxInfra = 160; + double vehicleCommercial = 120; + boolean isTunnel = false; + int bridgeTransfert = 0; + + // Compute deltaT + double vehiclePerHour1 = (1000 * vehicleSpeed1); //for one vehicle + double deltaL0 = 10 * Math.log10(vehiclePerHour1 * nTracks); + double deltaTDay1 = 10 * Math.log10(tDay1) - deltaL0; + double deltaTEvening1 = 10 * Math.log10(tEvening1) - deltaL0; + double deltaTNight1 = 10 * Math.log10(tNight1) - deltaL0; + + double vehiclePerHour2 = (1000 * vehicleSpeed2); //for one vehicle + deltaL0 = 10 * Math.log10(vehiclePerHour2 * nTracks); + double deltaTDay2 = 10 * Math.log10(tDay2) - deltaL0; + double deltaTEvening2 = 10 * Math.log10(tEvening2) - deltaL0; + double deltaTNight2 = 10 * Math.log10(tNight2) - deltaL0; + + double vehiclePerHour3 = (1000 * vehicleSpeed3); //for one vehicle + deltaL0 = 10 * Math.log10(vehiclePerHour3 * nTracks); + double deltaTDay3 = 10 * Math.log10(tDay3) - deltaL0; + double deltaTEvening3 = 10 * Math.log10(tEvening3) - deltaL0; + double deltaTNight3 = 10 * Math.log10(tNight3) - deltaL0; + + double vehiclePerHour4 = (1000 * vehicleSpeed4); //for one vehicle + deltaL0 = 10 * Math.log10(vehiclePerHour4 * nTracks); + double deltaTDay4 = 10 * Math.log10(tDay4) - deltaL0; + double deltaTEvening4 = 10 * Math.log10(tEvening4) - deltaL0; + double deltaTNight4 = 10 * Math.log10(tNight4) - deltaL0; + + double vehiclePerHour5 = (1000 * vehicleSpeed5); //for one vehicle + deltaL0 = 10 * Math.log10(vehiclePerHour5 * nTracks); + double deltaTDay5 = 10 * Math.log10(tDay5) - deltaL0; + double deltaTEvening5 = 10 * Math.log10(tEvening5) - deltaL0; + double deltaTNight5 = 10 * Math.log10(tNight5) - deltaL0; + + // Expected values + double[] expectedValuesLWRollingD = new double[]{47.1552955205404, 48.8498299106887, 52.6506665062211, 59.9189540729727, 57.9682560825282, 58.5872885355725, 59.0528160959685, 60.1904875304058, 60.6442541026116, 62.4955801250664, 64.9184365575419, 70.5236596616762, 75.9091586312107, 76.6780384718047, 74.8656580571925, 71.8258438346925, 69.0422555458139, 66.2590037381391, 64.4635730861252, 62.3174294364882, 58.0523015636309, 51.1818941714616, 49.4692864131497, 47.5870164960235}; + double[] expectedValuesLWRollingE = new double[]{46.7153189292102, 48.540003543594, 52.5625340892052, 60.0787091329295, 57.9923893388288, 58.6495173688799, 59.0916185428417, 60.1979886666328, 60.6185205324881, 62.4960038970257, 64.9683137433641, 70.562548216149, 75.9313127158166, 76.6869876714216, 74.8713872507045, 71.8271267251379, 69.0163596754784, 66.1966324248387, 64.3988216929349, 62.2298468109704, 57.9544897520346, 51.0604922061408, 49.3019210916908, 47.4515242894244}; + double[] expectedValuesLWRollingN = new double[]{46.1270508967803, 48.0388064828929, 51.9977848913093, 59.7778707051652, 57.4505710153709, 58.0747874408452, 58.2265981950651, 59.2354414276101, 59.2675554683469, 60.7056375004388, 62.8199452089267, 67.8798770364391, 72.7517670066939, 73.2280095787096, 71.3038487930857, 68.2530122348682, 65.6895763573932, 63.6625773432251, 62.317581482955, 60.0794037396615, 56.4441459388305, 49.9352912430575, 48.0608827756958, 46.1859326090793}; + + double[] expectedValuesLW_Traction_A_D = new double[]{46.6113350513868, 46.5361930551615, 46.4507560297314, 46.4615638226975, 43.7430615177986, 50.3108176641904, 47.0669699562295, 41.9733820154675, 44.9476552863602, 44.0601109307387, 43.5845906890585, 42.5291935606719, 44.0678692086462, 42.2820604493695, 39.3273037341639, 38.7228940509159, 37.701456345155, 35.0584081257409, 34.9065665976502, 32.1860323878995, 28.9788221314718, 24.6576825124615, 19.3206918485612, 17.4371753071292}; + double[] expectedValuesLW_Traction_A_E = new double[]{45.8328681049925, 45.786234654668, 45.7429051220906, 45.3887520516725, 42.8767932132583, 49.1270860066919, 45.9523201972128, 41.2845923821496, 44.272113341395, 43.2015176915916, 42.9875064075318, 41.9345847780754, 43.7642442442831, 41.6353141126725, 38.7319900260274, 37.9848318047791, 37.2510674836558, 34.3066693732319, 34.2589449165509, 31.1934631044681, 28.0984026857766, 23.7802040911827, 18.466879142774, 16.6411101334843}; + double[] expectedValuesLW_Traction_A_N = new double[]{46.0848410660751, 46.1332009230439, 46.2608016902272, 44.9756706211064, 42.8060094745255, 48.4199531690002, 45.2738703819419, 40.3948530934846, 42.8148965285004, 42.5567543659976, 42.3409101395776, 41.8331316056441, 41.8487195283546, 40.999669853935, 38.3337368784949, 37.035478413884, 36.3931579683877, 33.005287899018, 32.377048539335, 30.045709663381, 26.8475690712121, 23.0216616855918, 18.1249028285137, 16.4062831110709}; + + double[] expectedValuesL_Traction_B_D = new double[]{28.1206003941747, 27.4206004782821, 24.7206009653633, 22.9206015056726, 21.5206021113937, 22.6206016195594, 24.0206011493702, 28.2206003832282, 28.7206003321217, 23.6206012686259, 27.6206004528527, 25.1206008727914, 23.6206012686259, 24.4206010406076, 23.4206013325014, 22.3206017415914, 21.0206023796041, 20.020603018198, 18.9206039131889, 15.1206095083875, 12.9206158371834, 11.0206245764616, 5.12069586340405, 3.82072934593712}; + double[] expectedValuesL_Traction_B_E = new double[]{29.8815127708764, 29.181512817581, 26.4815130880562, 24.6815133880888, 23.2815137244444, 24.3815134513299, 25.7815131902348, 29.9815127647978, 30.4815127364185, 25.3815132564572, 29.3815128034602, 26.8815130366512, 25.3815132564572, 26.1815131298392, 25.1815132919272, 24.0815135190939, 22.7815138733811, 21.7815142279909, 20.6815147249775, 16.8815178319809, 14.6815213463517, 12.7815261992633, 6.88156578498707, 5.58158437797714}; + double[] expectedValuesL_Traction_B_N = new double[]{33.5612804391897, 32.8612804536025, 30.1612805370699, 28.3612806296585, 26.9612807334563, 28.0612806491744, 29.4612805686017, 33.6612804373138, 34.1612804285561, 29.0612805890376, 33.0612804492449, 30.5612805212065, 29.0612805890376, 29.8612805499639, 28.8612805999835, 27.7612806700861, 26.4612807794175, 25.4612808888484, 24.3612810422162, 20.5612820010234, 18.361283085543, 16.4612845831314, 10.561296799165, 9.26130253693161}; + + // Compute + RailwayVehicleCnossosParameters vehicleParameters1 = new RailwayVehicleCnossosParameters(vehCat1, vehicleSpeed1, vehiclePerHour1, rollingCondition1, idlingTime1); + RailwayVehicleCnossosParameters vehicleParameters2 = new RailwayVehicleCnossosParameters(vehCat2, vehicleSpeed2, vehiclePerHour2, rollingCondition2, idlingTime2); + RailwayVehicleCnossosParameters vehicleParameters3 = new RailwayVehicleCnossosParameters(vehCat3, vehicleSpeed3, vehiclePerHour3, rollingCondition3, idlingTime3); + RailwayVehicleCnossosParameters vehicleParameters4 = new RailwayVehicleCnossosParameters(vehCat4, vehicleSpeed4, vehiclePerHour4, rollingCondition4, idlingTime4); + RailwayVehicleCnossosParameters vehicleParameters5 = new RailwayVehicleCnossosParameters(vehCat5, vehicleSpeed5, vehiclePerHour5, rollingCondition5, idlingTime5); + RailwayTrackCnossosParameters trackParameters = new RailwayTrackCnossosParameters(vMaxInfra, trackTransfer, railRoughness, + impactNoise, bridgeTransfert, curvature, vehicleCommercial, isTunnel, nTracks); + RailWayParameters lWRailWay1 = railwayCnossos.evaluate(vehicleParameters1, trackParameters); + RailWayParameters lWRailWay2 = railwayCnossos.evaluate(vehicleParameters2, trackParameters); + RailWayParameters lWRailWay3 = railwayCnossos.evaluate(vehicleParameters3, trackParameters); + RailWayParameters lWRailWay4 = railwayCnossos.evaluate(vehicleParameters4, trackParameters); + RailWayParameters lWRailWay5 = railwayCnossos.evaluate(vehicleParameters5, trackParameters); + + for (int idFreq = 0; idFreq < 24; idFreq++) { + + //Day + double rolling = 10 * Math.log10(Math.pow(10, (lWRailWay1.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit1) + deltaTDay1) / 10) + Math.pow(10, (lWRailWay2.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit2) + deltaTDay2) / 10) + Math.pow(10, (lWRailWay3.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit3) + deltaTDay3) / 10) + Math.pow(10, (lWRailWay4.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit4) + deltaTDay4) / 10) + Math.pow(10, (lWRailWay5.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit5) + deltaTDay5) / 10)); + double tractionA = 10 * Math.log10(Math.pow(10, (lWRailWay1.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit1) + deltaTDay1) / 10) + Math.pow(10, (lWRailWay2.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit2) + deltaTDay2) / 10) + Math.pow(10, (lWRailWay3.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit3) + deltaTDay3) / 10) + Math.pow(10, (lWRailWay4.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit4) + deltaTDay4) / 10) + Math.pow(10, (lWRailWay5.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit5) + deltaTDay5) / 10)); + double tractionB = 10 * Math.log10(Math.pow(10, (lWRailWay1.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit1) + deltaTDay1) / 10) + Math.pow(10, (lWRailWay2.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit2) + deltaTDay2) / 10) + Math.pow(10, (lWRailWay3.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit3) + deltaTDay3) / 10) + Math.pow(10, (lWRailWay4.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit4) + deltaTDay4) / 10) + Math.pow(10, (lWRailWay5.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit5) + deltaTDay5) / 10)); + assertEquals(expectedValuesLWRollingD[idFreq], rolling, EPSILON_TEST1); + assertEquals(expectedValuesLW_Traction_A_D[idFreq], tractionA, EPSILON_TEST1); + assertEquals(expectedValuesL_Traction_B_D[idFreq], tractionB, EPSILON_TEST1); + + //Evening + rolling = 10 * Math.log10(Math.pow(10, (lWRailWay1.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit1) + deltaTEvening1) / 10) + Math.pow(10, (lWRailWay2.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit2) + deltaTEvening2) / 10) + Math.pow(10, (lWRailWay3.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit3) + deltaTEvening3) / 10) + Math.pow(10, (lWRailWay4.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit4) + deltaTEvening4) / 10) + Math.pow(10, (lWRailWay5.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit5) + deltaTEvening5) / 10)); + tractionA = 10 * Math.log10(Math.pow(10, (lWRailWay1.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit1) + deltaTEvening1) / 10) + Math.pow(10, (lWRailWay2.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit2) + deltaTEvening2) / 10) + Math.pow(10, (lWRailWay3.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit3) + deltaTEvening3) / 10) + Math.pow(10, (lWRailWay4.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit4) + deltaTEvening4) / 10) + Math.pow(10, (lWRailWay5.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit5) + deltaTEvening5) / 10)); + tractionB = 10 * Math.log10(Math.pow(10, (lWRailWay1.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit1) + deltaTEvening1) / 10) + Math.pow(10, (lWRailWay2.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit2) + deltaTEvening2) / 10) + Math.pow(10, (lWRailWay3.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit3) + deltaTEvening3) / 10) + Math.pow(10, (lWRailWay4.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit4) + deltaTEvening4) / 10) + Math.pow(10, (lWRailWay5.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit5) + deltaTEvening5) / 10)); + assertEquals(expectedValuesLWRollingE[idFreq], rolling, EPSILON_TEST1); + assertEquals(expectedValuesLW_Traction_A_E[idFreq], tractionA, EPSILON_TEST1); + assertEquals(expectedValuesL_Traction_B_E[idFreq], tractionB, EPSILON_TEST1); + + //Night + rolling = 10 * Math.log10(Math.pow(10, (lWRailWay1.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit1) + deltaTNight1) / 10) + Math.pow(10, (lWRailWay2.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit2) + deltaTNight2) / 10) + Math.pow(10, (lWRailWay3.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit3) + deltaTNight3) / 10) + Math.pow(10, (lWRailWay4.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit4) + deltaTNight4) / 10) + Math.pow(10, (lWRailWay5.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit5) + deltaTNight5) / 10)); + tractionA = 10 * Math.log10(Math.pow(10, (lWRailWay1.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit1) + deltaTNight1) / 10) + Math.pow(10, (lWRailWay2.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit2) + deltaTNight2) / 10) + Math.pow(10, (lWRailWay3.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit3) + deltaTNight3) / 10) + Math.pow(10, (lWRailWay4.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit4) + deltaTNight4) / 10) + Math.pow(10, (lWRailWay5.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit5) + deltaTNight5) / 10)); + tractionB = 10 * Math.log10(Math.pow(10, (lWRailWay1.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit1) + deltaTNight1) / 10) + Math.pow(10, (lWRailWay2.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit2) + deltaTNight2) / 10) + Math.pow(10, (lWRailWay3.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit3) + deltaTNight3) / 10) + Math.pow(10, (lWRailWay4.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit4) + deltaTNight4) / 10) + Math.pow(10, (lWRailWay5.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit5) + deltaTNight5) / 10)); + assertEquals(expectedValuesLWRollingN[idFreq], rolling, EPSILON_TEST1); + assertEquals(expectedValuesLW_Traction_A_N[idFreq], tractionA, EPSILON_TEST1); + assertEquals(expectedValuesL_Traction_B_N[idFreq], tractionB, EPSILON_TEST1); + + + } + } + + @Test + public void Test_Cnossos_Rail_emission_OC6() throws IOException { + + railwayCnossos.setVehicleDataFile("RailwayVehiclesCnossos.json"); + railwayCnossos.setTrainSetDataFile("RailwayTrainsets.json"); + railwayCnossos.setRailwayDataFile("RailwayCnossosSNCF_2021.json"); + + String vehCat = "SNCF2"; + double vehicleSpeed = 80; + int rollingCondition = 0; + double idlingTime = 0; + double nBUnit = 2; + double tDay = 0.4; + double tEvening = 0.3; + double tNight = 0.25; + + int nTracks = 2; + int trackTransfer = 5; + int railRoughness = 1; + int impactNoise = 1; + int curvature = 0; + double vMaxInfra = 160; + double vehicleCommercial = 120; + boolean isTunnel = true; + int bridgeTransfert = 0; + + // Compute deltaT + double vehiclePerHour = (1000 * vehicleSpeed); //for one vehicle + double deltaL0 = 10 * Math.log10(vehiclePerHour * nTracks); + double deltaTDay = 10 * Math.log10(tDay) - deltaL0; + double deltaTEvening = 10 * Math.log10(tEvening) - deltaL0; + double deltaTNight = 10 * Math.log10(tNight) - deltaL0; + + // Expected values + double[] expectedValuesLWRollingD = new double[]{-140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140}; + double[] expectedValuesLW_Traction_A_D = new double[]{-140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140}; + double[] expectedValuesL_Traction_B_D = new double[]{-140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140}; + double[] expectedValuesLW_Aero_A_D = new double[]{-140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140}; + double[] expectedValuesLW_Aero_B_D = new double[]{-140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, -140}; + + // Compute + RailwayVehicleCnossosParameters vehicleParameters = new RailwayVehicleCnossosParameters(vehCat, vehicleSpeed, vehiclePerHour, rollingCondition, idlingTime); + vehicleParameters.setFileVersion("FR"); + RailwayTrackCnossosParameters trackParameters = new RailwayTrackCnossosParameters(vMaxInfra, trackTransfer, railRoughness, + impactNoise, bridgeTransfert, curvature, vehicleCommercial, isTunnel, nTracks); + RailWayParameters lWRailWay = railwayCnossos.evaluate(vehicleParameters, trackParameters); + assertTrue(lWRailWay.railwaySourceList.isEmpty()); + + } + + @Test + public void Test_Cnossos_Rail_emission_OC7() throws IOException { + + railwayCnossos.setVehicleDataFile("RailwayVehiclesCnossos.json"); + railwayCnossos.setTrainSetDataFile("RailwayTrainsets.json"); + railwayCnossos.setRailwayDataFile("RailwayCnossosSNCF_2021.json"); + + String vehCat = "SNCF2"; + double vehicleSpeed = 300; + int rollingCondition = 0; + double idlingTime = 0; + double nBUnit = 2; + double tDay = 0.4; + double tEvening = 0.3; + double tNight = 0.25; + + int nTracks = 2; + int trackTransfer = 5; + int railRoughness = 2; + int impactNoise = 0; + int curvature = 0; + double vMaxInfra = 350; + double vehicleCommercial = 300; + boolean isTunnel = false; + int bridgeTransfert = 0; + + // Compute deltaT + double vehiclePerHour = (1000 * vehicleSpeed); //for one vehicle + double deltaL0 = 10 * Math.log10(vehiclePerHour * nTracks); + double deltaTDay = 10 * Math.log10(tDay) - deltaL0; + double deltaTEvening = 10 * Math.log10(tEvening) - deltaL0; + double deltaTNight = 10 * Math.log10(tNight) - deltaL0; + + // Expected values + double[] expectedValuesLWRollingD = new double[]{33.6733596010837, 34.95169576625, 38.2539731975929, 44.1801059537931, 42.888610835611, 44.0148743871629, 45.6800277990472, 47.6677743937925, 48.7556304666653, 51.3814838437463, 52.4049926613164, 57.631720998909, 63.3357285948357, 66.1337582772167, 66.4000139556384, 66.2606389650649, 67.9407445637443, 68.7526472395718, 67.7497360005367, 64.0167245325835, 58.7017301999714, 52.2571748232612, 52.5279874725351, 50.9834474448221}; + double[] expectedValuesLWRollingE = new double[]{32.4239722350007, 33.702308400167, 37.0045858315099, 42.9307185877101, 41.639223469528, 42.7654870210799, 44.4306404329642, 46.4183870277095, 47.5062431005823, 50.1320964776633, 51.1556052952334, 56.382333632826, 62.0863412287527, 64.8843709111337, 65.1506265895554, 65.0112515989819, 66.6913571976613, 67.5032598734888, 66.5003486344537, 62.7673371665005, 57.4523428338884, 51.0077874571782, 51.2786001064521, 49.7340600787391}; + double[] expectedValuesLWRollingN = new double[]{31.6321597745245, 32.9104959396908, 36.2127733710337, 42.1389061272339, 40.8474110090518, 41.9736745606036, 43.638827972488, 45.6265745672333, 46.714430640106, 49.340284017187, 50.3637928347571, 55.5905211723497, 61.2945287682765, 64.0925584506574, 64.3588141290791, 64.2194391385057, 65.899544737185, 66.7114474130125, 65.7085361739774, 61.9755247060243, 56.6605303734121, 50.2159749967019, 50.4867876459759, 48.9422476182628}; + + double[] expectedValuesLW_Traction_A_D = new double[]{40.149387366083, 40.049387366083, 39.949387366083, 40.449387366083, 37.349387366083, 44.449387366083, 41.049387366083, 34.549387366083, 37.149387366083, 37.349387366083, 35.949387366083, 35.249387366083, 33.749387366083, 34.849387366083, 31.849387366083, 31.449387366083, 29.249387366083, 27.649387366083, 26.749387366083, 25.649387366083, 22.049387366083, 17.949387366083, 12.749387366083, 10.749387366083}; + double[] expectedValuesLW_Traction_A_E = new double[]{38.9, 38.8, 38.7, 39.2, 36.1, 43.2, 39.8, 33.3, 35.9, 36.1, 34.7, 34, 32.5, 33.6, 30.6, 30.2, 28, 26.4, 25.5, 24.4, 20.8, 16.7, 11.5, 9.50000000000001}; + double[] expectedValuesLW_Traction_A_N = new double[]{38.1081875395238, 38.0081875395237, 37.9081875395238, 38.4081875395238, 35.3081875395237, 42.4081875395238, 39.0081875395237, 32.5081875395237, 35.1081875395238, 35.3081875395237, 33.9081875395238, 33.2081875395237, 31.7081875395237, 32.8081875395237, 29.8081875395237, 29.4081875395238, 27.2081875395237, 25.6081875395238, 24.7081875395237, 23.6081875395238, 20.0081875395237, 15.9081875395238, 10.7081875395238, 8.70818753952375}; + + double[] expectedValuesL_Traction_B_D = new double[]{-48.7506126306598, -48.7506126306598, -48.7506126306598, -48.7506126306598, -48.7506126306598, -48.7506126306598, -48.7506126306598, -48.7506126306598, -48.7506126306598, -48.7506126306598, -48.7506126306598, -48.7506126306598, -48.7506126306598, -48.7506126306598, -48.7506126306598, -48.7506126306598, -48.7506126306598, -48.7506126306598, -48.7506126306598, -48.7506126306598, -48.7506126306598, -48.7506126306598, -48.7506126306598, -48.7506126306598}; + double[] expectedValuesL_Traction_B_E = new double[]{-49.9999999956571, -49.9999999956571, -49.9999999956571, -49.9999999956571, -49.9999999956571, -49.9999999956571, -49.9999999956571, -49.9999999956571, -49.9999999956571, -49.9999999956571, -49.9999999956571, -49.9999999956571, -49.9999999956571, -49.9999999956571, -49.9999999956571, -49.9999999956571, -49.9999999956571, -49.9999999956571, -49.9999999956571, -49.9999999956571, -49.9999999956571, -49.9999999956571, -49.9999999956571, -49.9999999956571}; + double[] expectedValuesL_Traction_B_N = new double[]{-50.7918124552647, -50.7918124552647, -50.7918124552647, -50.7918124552647, -50.7918124552647, -50.7918124552647, -50.7918124552647, -50.7918124552647, -50.7918124552647, -50.7918124552647, -50.7918124552647, -50.7918124552647, -50.7918124552647, -50.7918124552647, -50.7918124552647, -50.7918124552647, -50.7918124552647, -50.7918124552647, -50.7918124552647, -50.7918124552647, -50.7918124552647, -50.7918124552647, -50.7918124552647, -50.7918124552647}; + + double[] expectedValuesLW_Aero_A_D = new double[]{52.449387366083, 53.649387366083, 52.149387366083, 52.449387366083, 51.649387366083, 52.049387366083, 54.649387366083, 57.349387366083, 58.049387366083, 58.349387366083, 59.149387366083, 57.549387366083, 41.049387366083, 38.449387366083, 35.549387366083, 32.449387366083, 28.849387366083, 26.249387366083, 20.049387366083, -19.5506126339131, -62.7506125520996, -62.650612553962, -64.4506125129002, -64.5506125100814}; + double[] expectedValuesLW_Aero_A_E = new double[]{51.2, 52.4, 50.9, 51.2, 50.4, 50.8, 53.4, 56.1, 56.8, 57.1, 57.9, 56.3, 39.8, 37.2, 34.3, 31.2, 27.6, 25, 18.8, -20.7999999999948, -63.9999998909102, -63.8999998933933, -65.6999998386443, -65.7999998348859}; + double[] expectedValuesLW_Aero_A_N = new double[]{50.4081875395238, 51.6081875395238, 50.1081875395238, 50.4081875395238, 49.6081875395238, 50.0081875395237, 52.6081875395238, 55.3081875395237, 56.0081875395237, 56.3081875395237, 57.1081875395238, 55.5081875395237, 39.0081875395237, 36.4081875395238, 33.5081875395237, 30.4081875395238, 26.8081875395237, 24.2081875395237, 18.0081875395237, -21.59181246047, -64.7918123295684, -64.6918123325483, -66.4918122668494, -66.5918122623393}; + + double[] expectedValuesLW_Aero_B_D = new double[]{61.449387366083, 62.549387366083, 63.849387366083, 64.949387366083, 63.949387366083, 62.349387366083, 62.349387366083, 61.449387366083, 62.049387366083, 62.349387366083, 62.249387366083, 60.649387366083, 58.549387366083, 57.349387366083, 51.849387366083, 48.949387366083, 42.849387366083, 16.349387366083, -34.9506126337812, -56.5506126142904, -56.3506126151737, -55.7506126175923, -61.7506125689271, -62.4506125575606}; + double[] expectedValuesLW_Aero_B_E = new double[]{60.2, 61.3, 62.6, 63.7, 62.7, 61.1, 61.1, 60.2, 60.8, 61.1, 61, 59.4, 57.3, 56.1, 50.6, 47.7, 41.6, 15.1, -36.199999999819, -57.7999999738312, -57.599999975009, -56.9999999782337, -62.9999999133469, -63.6999998981914}; + double[] expectedValuesLW_Aero_B_N = new double[]{59.4081875395238, 60.5081875395237, 61.8081875395237, 62.9081875395238, 61.9081875395238, 60.3081875395237, 60.3081875395237, 59.4081875395238, 60.0081875395237, 60.3081875395237, 60.2081875395237, 58.6081875395238, 56.5081875395237, 55.3081875395237, 49.8081875395237, 46.9081875395238, 40.8081875395237, 14.3081875395237, -36.991812460259, -58.5918124290736, -58.391812430487, -57.7918124343567, -63.7918123564925, -64.491812338306}; + + // Compute + RailwayVehicleCnossosParameters vehicleParameters = new RailwayVehicleCnossosParameters(vehCat, vehicleSpeed, vehiclePerHour, rollingCondition, idlingTime); + vehicleParameters.setFileVersion("FR"); + RailwayTrackCnossosParameters trackParameters = new RailwayTrackCnossosParameters(vMaxInfra, trackTransfer, railRoughness, + impactNoise, bridgeTransfert, curvature, vehicleCommercial, isTunnel, nTracks); + RailWayParameters lWRailWay = railwayCnossos.evaluate(vehicleParameters, trackParameters); + + for (int idFreq = 0; idFreq < 24; idFreq++) { + + //Day + double r = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTDay) / 10)); + double tA = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTDay) / 10)); + double tB = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTDay) / 10)); + double aA = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("AERODYNAMICA").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTDay) / 10)); + double aB = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("AERODYNAMICB").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTDay) / 10)); + assertEquals(expectedValuesLWRollingD[idFreq], r, EPSILON_TEST1); + assertEquals(expectedValuesLW_Traction_A_D[idFreq], tA, EPSILON_TEST1); + assertEquals(expectedValuesL_Traction_B_D[idFreq], tB, EPSILON_TEST1); + assertEquals(expectedValuesLW_Aero_A_D[idFreq], aA, EPSILON_TEST1); + assertEquals(expectedValuesLW_Aero_B_D[idFreq], aB, EPSILON_TEST1); + + //Evening + r = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTEvening) / 10)); + tA = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTEvening) / 10)); + tB = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTEvening) / 10)); + aA = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("AERODYNAMICA").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTEvening) / 10)); + aB = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("AERODYNAMICB").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTEvening) / 10)); + assertEquals(expectedValuesLWRollingE[idFreq], r, EPSILON_TEST1); + assertEquals(expectedValuesLW_Traction_A_E[idFreq], tA, EPSILON_TEST1); + assertEquals(expectedValuesL_Traction_B_E[idFreq], tB, EPSILON_TEST1); + assertEquals(expectedValuesLW_Aero_A_E[idFreq], aA, EPSILON_TEST1); + assertEquals(expectedValuesLW_Aero_B_E[idFreq], aB, EPSILON_TEST1); + + //Night + r = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("ROLLING").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTNight) / 10)); + tA = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONA").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTNight) / 10)); + tB = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("TRACTIONB").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTNight) / 10)); + aA = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("AERODYNAMICA").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTNight) / 10)); + aB = 10 * Math.log10(Math.pow(10, (lWRailWay.getRailwaySourceList().get("AERODYNAMICB").getlW()[idFreq] + 10 * Math.log10(nBUnit) + deltaTNight) / 10)); + assertEquals(expectedValuesLWRollingN[idFreq], r, EPSILON_TEST1); + assertEquals(expectedValuesLW_Traction_A_N[idFreq], tA, EPSILON_TEST1); + assertEquals(expectedValuesL_Traction_B_N[idFreq], tB, EPSILON_TEST1); + assertEquals(expectedValuesLW_Aero_A_N[idFreq], aA, EPSILON_TEST1); + assertEquals(expectedValuesLW_Aero_B_N[idFreq], aB, EPSILON_TEST1); + + } + } +} diff --git a/noisemodelling-emission/src/test/java/org/noise_planet/noisemodelling/emission/EvaluateRoadSourceCnossosTest.java b/noisemodelling-emission/src/test/java/org/noise_planet/noisemodelling/emission/road/RoadCnossosTest.java similarity index 59% rename from noisemodelling-emission/src/test/java/org/noise_planet/noisemodelling/emission/EvaluateRoadSourceCnossosTest.java rename to noisemodelling-emission/src/test/java/org/noise_planet/noisemodelling/emission/road/RoadCnossosTest.java index 663e916ee..627f6fe33 100644 --- a/noisemodelling-emission/src/test/java/org/noise_planet/noisemodelling/emission/EvaluateRoadSourceCnossosTest.java +++ b/noisemodelling-emission/src/test/java/org/noise_planet/noisemodelling/emission/road/RoadCnossosTest.java @@ -1,30 +1,33 @@ /** - * NoiseModelling is an open-source tool designed to produce environmental noise maps on very large urban areas. It can be used as a Java library or be controlled through a user friendly web interface. - * - * This version is developed by the DECIDE team from the Lab-STICC (CNRS) and by the Mixt Research Unit in Environmental Acoustics (Université Gustave Eiffel). - * - * + * NoiseModelling is a library capable of producing noise maps. It can be freely used either for research and education, as well as by experts in a professional use. + *

* NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. - * + *

+ * Official webpage : http://noise-planet.org/noisemodelling.html * Contact: contact@noise-planet.org - * */ +package org.noise_planet.noisemodelling.emission.road; -package org.noise_planet.noisemodelling.emission; - +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.NullNode; import org.junit.Test; +import org.noise_planet.noisemodelling.emission.road.cnossos.RoadCnossos; +import org.noise_planet.noisemodelling.emission.road.cnossos.RoadCnossosParameters; import java.io.IOException; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; /** - * @author Pierre Aumond, Univ. Gustave Eiffel + * Test the Road model CNOSSOS as implemented in RoadCnossos.java + * @author Pierre Aumond, Univ. Gustave eiffel */ -public class EvaluateRoadSourceCnossosTest { + +public class RoadCnossosTest { private static final double EPSILON_TEST1 = 0.01; - private static final int[] FREQUENCIES = new int[] {63,125,250,500,1000,2000,4000,8000}; + private static final int[] FREQUENCIES = new int[]{63, 125, 250, 500, 1000, 2000, 4000, 8000}; /** based on CNOSSOS_Road_Output.csv and the CNOSSOS_DLL_CONSOLE.exe**/ @Test @@ -46,11 +49,10 @@ public void T02() throws IOException { double Ts_stud = 4; double Junc_dist = 200; int Junc_type = 1; - RoadSourceParametersCnossos rsParameters = new RoadSourceParametersCnossos(lv_speed, mv_speed, hgv_speed, wav_speed, wbv_speed, lv_per_hour, mv_per_hour, hgv_per_hour, wav_per_hour, wbv_per_hour, FreqParam, Temperature, RoadSurface,Ts_stud, Pm_stud , Junc_dist, Junc_type); + RoadCnossosParameters rsParameters = new RoadCnossosParameters(lv_speed, mv_speed, hgv_speed, wav_speed, wbv_speed, lv_per_hour, mv_per_hour, hgv_per_hour, wav_per_hour, wbv_per_hour, FreqParam, Temperature, RoadSurface, Ts_stud, Pm_stud, Junc_dist, Junc_type); rsParameters.setSlopePercentage_without_limit(10); - rsParameters.setCoeffVer(1); - //System.out.println(EvaluateRoadSourceCnossos.evaluate(rsParameters)); - assertEquals(77.6711 , EvaluateRoadSourceCnossos.evaluate(rsParameters), EPSILON_TEST1); + rsParameters.setFileVersion(1); + assertEquals(77.6711, RoadCnossos.evaluate(rsParameters), EPSILON_TEST1); } /** based on CNOSSOS_Road_Output.csv and the CNOSSOS_DLL_CONSOLE.exe**/ @@ -73,11 +75,10 @@ public void T03() throws IOException { double Ts_stud = 4; double Junc_dist = 200; int Junc_type = 1; - RoadSourceParametersCnossos rsParameters = new RoadSourceParametersCnossos(lv_speed, mv_speed, hgv_speed, wav_speed, wbv_speed, lv_per_hour, mv_per_hour, hgv_per_hour, wav_per_hour, wbv_per_hour, FreqParam, Temperature, RoadSurface,Ts_stud, Pm_stud , Junc_dist, Junc_type); + RoadCnossosParameters rsParameters = new RoadCnossosParameters(lv_speed, mv_speed, hgv_speed, wav_speed, wbv_speed, lv_per_hour, mv_per_hour, hgv_per_hour, wav_per_hour, wbv_per_hour, FreqParam, Temperature, RoadSurface, Ts_stud, Pm_stud, Junc_dist, Junc_type); rsParameters.setSlopePercentage_without_limit(-5); - rsParameters.setCoeffVer(1); - //System.out.println(EvaluateRoadSourceCnossos.evaluate(rsParameters)); - assertEquals(79.6814 , EvaluateRoadSourceCnossos.evaluate(rsParameters), EPSILON_TEST1); + rsParameters.setFileVersion(1); + assertEquals(79.6814, RoadCnossos.evaluate(rsParameters), EPSILON_TEST1); } /** based on CNOSSOS_Road_Output.csv and the CNOSSOS_DLL_CONSOLE.exe**/ @@ -101,11 +102,10 @@ public void T04() throws IOException { double Junc_dist = 200; int Junc_type = 1; - RoadSourceParametersCnossos rsParameters = new RoadSourceParametersCnossos(lv_speed, mv_speed, hgv_speed, wav_speed, wbv_speed, lv_per_hour, mv_per_hour, hgv_per_hour, wav_per_hour, wbv_per_hour, FreqParam, Temperature, RoadSurface,Ts_stud, Pm_stud, Junc_dist, Junc_type ); + RoadCnossosParameters rsParameters = new RoadCnossosParameters(lv_speed, mv_speed, hgv_speed, wav_speed, wbv_speed, lv_per_hour, mv_per_hour, hgv_per_hour, wav_per_hour, wbv_per_hour, FreqParam, Temperature, RoadSurface, Ts_stud, Pm_stud, Junc_dist, Junc_type); rsParameters.setSlopePercentage_without_limit(-7); - rsParameters.setCoeffVer(1); - //System.out.println(EvaluateRoadSourceCnossos.evaluate(rsParameters)); - assertEquals(58.8222 , EvaluateRoadSourceCnossos.evaluate(rsParameters), EPSILON_TEST1); + rsParameters.setFileVersion(1); + assertEquals(58.8222, RoadCnossos.evaluate(rsParameters), EPSILON_TEST1); } @@ -129,11 +129,10 @@ public void T05() throws IOException { double Ts_stud = 4.; double Junc_dist = 50; int Junc_type = 1; - RoadSourceParametersCnossos rsParameters = new RoadSourceParametersCnossos(lv_speed, mv_speed, hgv_speed, wav_speed, wbv_speed, lv_per_hour, mv_per_hour, hgv_per_hour, wav_per_hour, wbv_per_hour, FreqParam, Temperature, RoadSurface,Ts_stud, Pm_stud, Junc_dist, Junc_type ); + RoadCnossosParameters rsParameters = new RoadCnossosParameters(lv_speed, mv_speed, hgv_speed, wav_speed, wbv_speed, lv_per_hour, mv_per_hour, hgv_per_hour, wav_per_hour, wbv_per_hour, FreqParam, Temperature, RoadSurface, Ts_stud, Pm_stud, Junc_dist, Junc_type); rsParameters.setSlopePercentage_without_limit(-7); - rsParameters.setCoeffVer(1); - //System.out.println(EvaluateRoadSourceCnossos.evaluate(rsParameters)); - assertEquals(82.785 , EvaluateRoadSourceCnossos.evaluate(rsParameters), EPSILON_TEST1); + rsParameters.setFileVersion(1); + assertEquals(82.785, RoadCnossos.evaluate(rsParameters), EPSILON_TEST1); } /** based on CNOSSOS_Road_Output.csv and the CNOSSOS_DLL_CONSOLE.exe**/ @@ -156,25 +155,25 @@ public void T06() throws IOException { double Ts_stud = 4.; double Junc_dist = 30; int Junc_type = 2; - RoadSourceParametersCnossos rsParameters = new RoadSourceParametersCnossos(lv_speed, mv_speed, hgv_speed, wav_speed, wbv_speed, lv_per_hour, mv_per_hour, hgv_per_hour, wav_per_hour, wbv_per_hour, FreqParam, Temperature, RoadSurface,Ts_stud, Pm_stud, Junc_dist, Junc_type ); + RoadCnossosParameters rsParameters = new RoadCnossosParameters(lv_speed, mv_speed, hgv_speed, wav_speed, wbv_speed, lv_per_hour, mv_per_hour, hgv_per_hour, wav_per_hour, wbv_per_hour, FreqParam, Temperature, RoadSurface, Ts_stud, Pm_stud, Junc_dist, Junc_type); rsParameters.setSlopePercentage_without_limit(10); - rsParameters.setCoeffVer(1); - assertEquals(85.4991 , EvaluateRoadSourceCnossos.evaluate(rsParameters), EPSILON_TEST1); + rsParameters.setFileVersion(1); + assertEquals(85.4991, RoadCnossos.evaluate(rsParameters), EPSILON_TEST1); } @Test public void TestTableIII() { int Freq = 125; String VehCat = "2"; - final Double coeff = EvaluateRoadSourceCnossos.getCoeff("ar",Freq, VehCat, 1); - assertEquals(88.7 , coeff, EPSILON_TEST1); + final Double coeff = RoadCnossos.getCoeff("ar", Freq, VehCat, 1); + assertEquals(88.7, coeff, EPSILON_TEST1); } @Test public void CnossosEmissionTest() throws IOException { - String vehCat="1"; + String vehCat = "1"; double vehiclePerHour = 1000; double vehicleSpeed = 20; double tsStud = 0.5; @@ -184,21 +183,22 @@ public void CnossosEmissionTest() throws IOException { double slope = -15; double juncDist = 200; int juncType = 1; - double[] expectedValues = new double[]{88.421,77.1136,75.5712,75.6919,73.6689,71.3471,68.1195,63.4796}; - for(int idFreq = 1; idFreq < FREQUENCIES.length; idFreq++) { - RoadSourceParametersCnossos rsParameters = new RoadSourceParametersCnossos(vehicleSpeed, vehicleSpeed, vehicleSpeed, + double[] expectedValues = new double[]{88.421, 77.1136, 75.5712, 75.6919, 73.6689, 71.3471, 68.1195, 63.4796}; + for (int idFreq = 1; idFreq < FREQUENCIES.length; idFreq++) { + RoadCnossosParameters rsParameters = new RoadCnossosParameters(vehicleSpeed, vehicleSpeed, vehicleSpeed, vehicleSpeed, vehicleSpeed, "1".equals(vehCat) ? vehiclePerHour : 0, "2".equals(vehCat) ? vehiclePerHour : 0, "3".equals(vehCat) ? vehiclePerHour : 0, "4a".equals(vehCat) ? vehiclePerHour : 0, "4b".equals(vehCat) ? vehiclePerHour : 0, FREQUENCIES[idFreq], temperature, surfRef, tsStud, pmStud, juncDist, juncType); rsParameters.setSlopePercentage(slope); - rsParameters.setCoeffVer(1); - assertEquals(String.format("%d Hz", FREQUENCIES[idFreq]), expectedValues[idFreq], EvaluateRoadSourceCnossos.evaluate(rsParameters), EPSILON_TEST1); + rsParameters.setFileVersion(1); + assertEquals(String.format("%d Hz", FREQUENCIES[idFreq]), expectedValues[idFreq], RoadCnossos.evaluate(rsParameters), EPSILON_TEST1); } } + @Test public void CnossosEmissionTestwithSlope() throws IOException { - String vehCat="1"; + String vehCat = "1"; double vehiclePerHour = 1000; double vehicleSpeed = 20; double tsStud = 0.5; @@ -208,22 +208,22 @@ public void CnossosEmissionTestwithSlope() throws IOException { double slope = -15; double juncDist = 200; int juncType = 1; - double[] expectedValues = new double[]{88.421,77.09,75.54,75.01,72.79,71.13,68.07,63.44}; - for(int idFreq = 1; idFreq < FREQUENCIES.length; idFreq++) { - RoadSourceParametersCnossos rsParameters = new RoadSourceParametersCnossos(vehicleSpeed, vehicleSpeed, vehicleSpeed, + double[] expectedValues = new double[]{88.421, 77.09, 75.54, 75.01, 72.79, 71.13, 68.07, 63.44}; + for (int idFreq = 1; idFreq < FREQUENCIES.length; idFreq++) { + RoadCnossosParameters rsParameters = new RoadCnossosParameters(vehicleSpeed, vehicleSpeed, vehicleSpeed, vehicleSpeed, vehicleSpeed, "1".equals(vehCat) ? vehiclePerHour : 0, "2".equals(vehCat) ? vehiclePerHour : 0, "3".equals(vehCat) ? vehiclePerHour : 0, "4a".equals(vehCat) ? vehiclePerHour : 0, "4b".equals(vehCat) ? vehiclePerHour : 0, FREQUENCIES[idFreq], temperature, surfRef, tsStud, pmStud, juncDist, juncType); rsParameters.setSlopePercentage(slope); rsParameters.setWay(3); - rsParameters.setCoeffVer(1); - double result = EvaluateRoadSourceCnossos.evaluate(rsParameters); + rsParameters.setFileVersion(1); + double result = RoadCnossos.evaluate(rsParameters); assertEquals(String.format("%d Hz", FREQUENCIES[idFreq]), expectedValues[idFreq], result, EPSILON_TEST1); } } - @Test(expected = IllegalArgumentException.class) + @Test(expected = IOException.class) public void testWrongPavement() throws IOException { String vehCat="1"; double vehiclePerHour = 1000; @@ -237,16 +237,16 @@ public void testWrongPavement() throws IOException { int juncType = 1; double[] expectedValues = new double[]{88.421,77.09,75.54,75.01,72.79,71.13,68.07,63.44}; for(int idFreq = 1; idFreq < FREQUENCIES.length; idFreq++) { - RoadSourceParametersCnossos rsParameters = new RoadSourceParametersCnossos(vehicleSpeed, vehicleSpeed, vehicleSpeed, + RoadCnossosParameters rsParameters = new RoadCnossosParameters(vehicleSpeed, vehicleSpeed, vehicleSpeed, vehicleSpeed, vehicleSpeed, "1".equals(vehCat) ? vehiclePerHour : 0, "2".equals(vehCat) ? vehiclePerHour : 0, "3".equals(vehCat) ? vehiclePerHour : 0, "4a".equals(vehCat) ? vehiclePerHour : 0, "4b".equals(vehCat) ? vehiclePerHour : 0, FREQUENCIES[idFreq], temperature, surfRef, tsStud, pmStud, juncDist, juncType); rsParameters.setSlopePercentage(slope); rsParameters.setWay(3); - rsParameters.setCoeffVer(1); - double result = EvaluateRoadSourceCnossos.evaluate(rsParameters); - assertEquals(String.format("%d Hz", FREQUENCIES[idFreq]), expectedValues[idFreq], result, EPSILON_TEST1); + rsParameters.setFileVersion(1); + RoadCnossos.evaluate(rsParameters); + } } } \ No newline at end of file diff --git a/noisemodelling-emission/src/test/java/org/noise_planet/noisemodelling/emission/road/RoadVehicleCnossosvarTest.java b/noisemodelling-emission/src/test/java/org/noise_planet/noisemodelling/emission/road/RoadVehicleCnossosvarTest.java new file mode 100644 index 000000000..1a6013cc2 --- /dev/null +++ b/noisemodelling-emission/src/test/java/org/noise_planet/noisemodelling/emission/road/RoadVehicleCnossosvarTest.java @@ -0,0 +1,105 @@ +/** + * NoiseModelling is a library capable of producing noise maps. It can be freely used either for research and education, as well as by experts in a professional use. + *

+ * NoiseModelling is distributed under GPL 3 license. You can read a copy of this License in the file LICENCE provided with this software. + *

+ * Official webpage : http://noise-planet.org/noisemodelling.html + * Contact: contact@noise-planet.org + */ + +package org.noise_planet.noisemodelling.emission.road; + +import org.junit.Test; +import org.noise_planet.noisemodelling.emission.road.cnossosvar.RoadVehicleCnossosvar; +import org.noise_planet.noisemodelling.emission.road.cnossosvar.RoadVehicleCnossosvarParameters; + +import java.io.IOException; + +import static org.junit.Assert.assertEquals; + +/** + * Test the Road model CNOSSOS as implemented in RoadVehicleCnossosVar.java + * @author Pierre Aumond, Univ. Gustave eiffel + * @author Arnaud Can, Univ. Gustave eiffel + */ + +public class RoadVehicleCnossosvarTest { + private static final double EPSILON_TEST1 = 0.1; + + @Test + public void testRoadNoise1() throws IOException { + double speed = 50; + int acc = 1; + int FreqParam = 500; + double Temperature = 0; + String RoadSurface = "DEF"; + boolean Stud = true; + double Junc_dist = 200; + int Junc_type = 1; + String veh_type = "1"; + int acc_type = 1; + double LwStd = 1; + int VehId = 10; + + RoadVehicleCnossosvarParameters rsParameters = new RoadVehicleCnossosvarParameters(speed, acc, veh_type, acc_type, Stud, LwStd, VehId); + rsParameters.setSlopePercentage(0); + rsParameters.setFileVersion(2); + rsParameters.setFrequency(FreqParam); + rsParameters.setTemperature(Temperature); + rsParameters.setRoadSurface(RoadSurface); + rsParameters.setJunc_dist(Junc_dist); + rsParameters.setJunc_type(Junc_type); + assertEquals(91.66, RoadVehicleCnossosvar.evaluate(rsParameters), EPSILON_TEST1); + } + + @Test + public void testRoadNoise2_speed0() throws IOException { + double speed = 0; + int acc = 1; + int FreqParam = 500; + double Temperature = 0; + String RoadSurface = "DEF"; + boolean Stud = false; + double Junc_dist = 200; + int Junc_type = 1; + String veh_type = "3"; + int acc_type = 1; + double LwStd = 1; + int VehId = 10; + + RoadVehicleCnossosvarParameters rsParameters = new RoadVehicleCnossosvarParameters(speed, acc, veh_type, acc_type, Stud, LwStd, VehId); + rsParameters.setFrequency(FreqParam); + rsParameters.setTemperature(Temperature); + rsParameters.setRoadSurface(RoadSurface); + rsParameters.setJunc_dist(Junc_dist); + rsParameters.setJunc_type(Junc_type); + rsParameters.setSlopePercentage(0); + assertEquals(100.08, RoadVehicleCnossosvar.evaluate(rsParameters), EPSILON_TEST1); + } + + + @Test + public void testRoadNoise3_speed60() throws IOException { + int FreqParam = 8000; + double speed = 60; + int acc = 0; + + double Temperature = 15; + String RoadSurface = "NL08"; + boolean Stud = false; + double Junc_dist = 200; + int Junc_type = 1; + String veh_type = "1"; + int acc_type = 1; + double LwStd = 0; + int VehId = 1; + RoadVehicleCnossosvarParameters rsParameters = new RoadVehicleCnossosvarParameters(speed, acc, veh_type, acc_type, Stud, LwStd, VehId); + rsParameters.setSlopePercentage(0); + rsParameters.setFrequency(FreqParam); + rsParameters.setTemperature(Temperature); + rsParameters.setRoadSurface(RoadSurface); + rsParameters.setJunc_dist(Junc_dist); + rsParameters.setJunc_type(Junc_type); + assertEquals(78.62, RoadVehicleCnossosvar.evaluate(rsParameters), EPSILON_TEST1); + } +} \ No newline at end of file diff --git a/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/BezierContouring.java b/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/BezierContouring.java index 367e0823e..d1fd24e03 100644 --- a/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/BezierContouring.java +++ b/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/BezierContouring.java @@ -36,7 +36,8 @@ import java.text.DecimalFormat; import java.util.*; -import static org.noise_planet.noisemodelling.emission.Utils.dbaToW; +import static org.noise_planet.noisemodelling.emission.utils.Utils.dbaToW; + /** * Create isosurfaces diff --git a/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/DirectivityTableLoader.java b/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/DirectivityTableLoader.java index caf3b7f28..c63ac88f5 100644 --- a/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/DirectivityTableLoader.java +++ b/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/DirectivityTableLoader.java @@ -12,7 +12,7 @@ package org.noise_planet.noisemodelling.jdbc; import org.h2gis.utilities.JDBCUtilities; -import org.noise_planet.noisemodelling.emission.DiscreteDirectionAttributes; +import org.noise_planet.noisemodelling.emission.directivity.DiscreteDirectivitySphere; import java.sql.Connection; import java.sql.ResultSet; @@ -36,8 +36,8 @@ public class DirectivityTableLoader { * @param defaultInterpolation * @return */ - public static Map loadTable(Connection connection, String tableName, int defaultInterpolation) throws SQLException { - Map directionAttributes = new HashMap<>(); + public static Map loadTable(Connection connection, String tableName, int defaultInterpolation) throws SQLException { + Map directionAttributes = new HashMap<>(); List fields = JDBCUtilities.getColumnNames(connection, tableName); // fetch provided frequencies List frequenciesFields = new ArrayList<>(); @@ -70,12 +70,12 @@ public static Map loadTable(Connection con sb.append(" ORDER BY DIR_ID"); try(Statement st = connection.createStatement()) { try(ResultSet rs = st.executeQuery(sb.toString())) { - List rows = new ArrayList<>(); + List rows = new ArrayList<>(); int lastDirId = Integer.MIN_VALUE; while (rs.next()) { int dirId = rs.getInt(1); if(lastDirId != dirId && !rows.isEmpty()) { - DiscreteDirectionAttributes attributes = new DiscreteDirectionAttributes(lastDirId, frequencies); + DiscreteDirectivitySphere attributes = new DiscreteDirectivitySphere(lastDirId, frequencies); attributes.setInterpolationMethod(defaultInterpolation); attributes.addDirectivityRecords(rows); directionAttributes.put(lastDirId, attributes); @@ -88,11 +88,11 @@ public static Map loadTable(Connection con for(int freqColumn = 0; freqColumn < frequencies.length; freqColumn++) { att[freqColumn] = rs.getDouble(freqColumn + 4); } - DiscreteDirectionAttributes.DirectivityRecord r = new DiscreteDirectionAttributes.DirectivityRecord(theta, phi, att); + DiscreteDirectivitySphere.DirectivityRecord r = new DiscreteDirectivitySphere.DirectivityRecord(theta, phi, att); rows.add(r); } if(!rows.isEmpty()) { - DiscreteDirectionAttributes attributes = new DiscreteDirectionAttributes(lastDirId, frequencies); + DiscreteDirectivitySphere attributes = new DiscreteDirectivitySphere(lastDirId, frequencies); attributes.setInterpolationMethod(defaultInterpolation); attributes.addDirectivityRecords(rows); directionAttributes.put(lastDirId, attributes); diff --git a/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/LDENPointNoiseMapFactory.java b/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/LDENPointNoiseMapFactory.java index 300581736..fa261e1e6 100644 --- a/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/LDENPointNoiseMapFactory.java +++ b/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/LDENPointNoiseMapFactory.java @@ -25,8 +25,9 @@ import org.h2gis.utilities.GeometryTableUtilities; import org.h2gis.utilities.JDBCUtilities; import org.locationtech.jts.geom.LineString; -import org.noise_planet.noisemodelling.emission.DirectionAttributes; -import org.noise_planet.noisemodelling.emission.RailWayLW; +import org.noise_planet.noisemodelling.emission.LineSource; +import org.noise_planet.noisemodelling.emission.directivity.DirectivitySphere; +import org.noise_planet.noisemodelling.emission.railway.cnossos.RailWayCnossosParameters; import org.noise_planet.noisemodelling.jdbc.utils.StringPreparedStatements; import org.noise_planet.noisemodelling.pathfinder.*; import org.noise_planet.noisemodelling.pathfinder.utils.ProfilerThread; @@ -58,11 +59,13 @@ public class LDENPointNoiseMapFactory implements PointNoiseMap.PropagationProces static final int WRITER_CACHE = 65536; LDENComputeRaysOut.LdenData ldenData = new LDENComputeRaysOut.LdenData(); int srid; + List noiseSource = Arrays.asList("ROLLING","TRACTIONA", "TRACTIONB","AERODYNAMICA","AERODYNAMICB","BRIDGE"); + /** * Attenuation and other attributes relative to direction on sphere */ - public Map directionAttributes = new HashMap<>(); + public Map directionAttributes = new HashMap<>(); public LDENPointNoiseMapFactory(Connection connection, LDENConfig ldenConfig) { @@ -89,11 +92,14 @@ public LDENComputeRaysOut.LdenData getLdenData() { return ldenData; } + public void insertTrainDirectivity() { directionAttributes.clear(); directionAttributes.put(0, new LDENPropagationProcessData.OmnidirectionalDirection()); - for(RailWayLW.TrainNoiseSource noiseSource : RailWayLW.TrainNoiseSource.values()) { - directionAttributes.put(noiseSource.ordinal() + 1, new RailWayLW.TrainAttenuation(noiseSource)); + int i=1; + for(String typeSource : noiseSource) { + directionAttributes.put(i, new RailWayCnossosParameters.RailwayDirectivitySphere(new LineSource(typeSource))); + i++; } } diff --git a/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/LDENPropagationProcessData.java b/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/LDENPropagationProcessData.java index 87fce4ae7..98bcc5ff7 100644 --- a/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/LDENPropagationProcessData.java +++ b/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/LDENPropagationProcessData.java @@ -26,10 +26,10 @@ import org.h2gis.utilities.SpatialResultSet; import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.Geometry; -import org.noise_planet.noisemodelling.emission.DirectionAttributes; -import org.noise_planet.noisemodelling.emission.EvaluateRoadSourceCnossos; -import org.noise_planet.noisemodelling.emission.RoadSourceParametersCnossos; -import org.noise_planet.noisemodelling.emission.Utils; +import org.noise_planet.noisemodelling.emission.directivity.DirectivitySphere; +import org.noise_planet.noisemodelling.emission.road.cnossos.RoadCnossos; +import org.noise_planet.noisemodelling.emission.road.cnossos.RoadCnossosParameters; +import org.noise_planet.noisemodelling.emission.utils.Utils; import org.noise_planet.noisemodelling.pathfinder.CnossosPropagationData; import org.noise_planet.noisemodelling.pathfinder.ProfileBuilder; @@ -42,7 +42,6 @@ import java.util.Map; import static org.noise_planet.noisemodelling.pathfinder.utils.PowerUtils.dbaToW; -import static org.noise_planet.noisemodelling.pathfinder.utils.PowerUtils.wToDba; /** * Read source database and compute the sound emission spectrum of roads sources @@ -58,7 +57,7 @@ public class LDENPropagationProcessData extends CnossosPropagationData { /** * Attenuation and other attributes relative to direction on sphere */ - public Map directionAttributes = new HashMap<>(); + public Map directionAttributes = new HashMap<>(); LDENConfig ldenConfig; @@ -67,7 +66,7 @@ public LDENPropagationProcessData(ProfileBuilder builder, LDENConfig ldenConfig) this.ldenConfig = ldenConfig; } - public void setDirectionAttributes(Map directionAttributes) { + public void setDirectionAttributes(Map directionAttributes) { this.directionAttributes = directionAttributes; } @@ -224,13 +223,13 @@ public double[] getEmissionFromResultSet(ResultSet rs, String period, double slo // Compute emission int idFreq = 0; for (int freq : ldenConfig.propagationProcessPathDataDay.freq_lvl) { - RoadSourceParametersCnossos rsParametersCnossos = new RoadSourceParametersCnossos(lv_speed, mv_speed, hgv_speed, wav_speed, + RoadCnossosParameters rsParametersCnossos = new RoadCnossosParameters(lv_speed, mv_speed, hgv_speed, wav_speed, wbv_speed,lvPerHour, mvPerHour, hgvPerHour, wavPerHour, wbvPerHour, freq, temperature, roadSurface, tsStud, pmStud, junctionDistance, junctionType); rsParametersCnossos.setSlopePercentage(slope); rsParametersCnossos.setWay(way); - rsParametersCnossos.setCoeffVer(ldenConfig.coefficientVersion); - lvl[idFreq++] = EvaluateRoadSourceCnossos.evaluate(rsParametersCnossos); + rsParametersCnossos.setFileVersion(ldenConfig.coefficientVersion); + lvl[idFreq++] = RoadCnossos.evaluate(rsParametersCnossos); } return lvl; } @@ -309,7 +308,7 @@ public double[] getMaximalSourcePower(int sourceId) { } } - public static class OmnidirectionalDirection implements DirectionAttributes { + public static class OmnidirectionalDirection implements DirectivitySphere { @Override public double getAttenuation(double frequency, double phi, double theta) { diff --git a/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/PolarGraphDirectivity.java b/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/PolarGraphDirectivity.java index b7301a2e2..51e3a9719 100644 --- a/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/PolarGraphDirectivity.java +++ b/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/PolarGraphDirectivity.java @@ -2,8 +2,7 @@ import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.math.Vector2D; -import org.noise_planet.noisemodelling.emission.DirectionAttributes; -import org.noise_planet.noisemodelling.emission.RailWayLW; +import org.noise_planet.noisemodelling.emission.directivity.DirectivitySphere; import java.util.Locale; @@ -50,7 +49,7 @@ private void generateLegend(StringBuilder sb, double value, double position, dou "%.0f dB", value), "middle"); } - public String generatePolarGraph(DirectionAttributes noiseSource, double frequency, double minimumAttenuation, double maximumAttenuation, ORIENTATION orientation) { + public String generatePolarGraph(DirectivitySphere noiseSource, double frequency, double minimumAttenuation, double maximumAttenuation, ORIENTATION orientation) { // HEADER StringBuilder sb = new StringBuilder(String.format("\n", (int)dheight, (int)dwidth)); diff --git a/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/RailWayLWIterator.java b/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/RailWayLWIterator.java index a14086c53..a9233e630 100644 --- a/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/RailWayLWIterator.java +++ b/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/RailWayLWIterator.java @@ -8,10 +8,11 @@ import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.LineString; import org.locationtech.jts.operation.linemerge.LineMerger; -import org.noise_planet.noisemodelling.emission.EvaluateRailwaySourceCnossos; -import org.noise_planet.noisemodelling.emission.RailWayLW; -import org.noise_planet.noisemodelling.emission.RailwayTrackParametersCnossos; -import org.noise_planet.noisemodelling.emission.RailwayVehicleParametersCnossos; +import org.noise_planet.noisemodelling.emission.railway.RailWayParameters; +import org.noise_planet.noisemodelling.emission.railway.cnossos.RailWayCnossosParameters; +import org.noise_planet.noisemodelling.emission.railway.cnossos.RailwayCnossos; +import org.noise_planet.noisemodelling.emission.railway.cnossos.RailwayTrackCnossosParameters; +import org.noise_planet.noisemodelling.emission.railway.cnossos.RailwayVehicleCnossosParameters; import java.io.IOException; import java.sql.Connection; @@ -25,7 +26,7 @@ public class RailWayLWIterator implements Iterator { - private final EvaluateRailwaySourceCnossos evaluateRailwaySourceCnossos = new EvaluateRailwaySourceCnossos(); + private RailwayCnossos railway = new RailwayCnossos(); private Connection connection; private RailWayLWGeom railWayLWComplete = null; private RailWayLWGeom railWayLWIncomplete = new RailWayLWGeom(); @@ -34,6 +35,7 @@ public class RailWayLWIterator implements Iterator sourceFields = null; + /** * Generate sound source for train (with train source directivity) from traffic and geometry tracks tables * @param connection @@ -41,12 +43,31 @@ public class RailWayLWIterator implements Iterator vehicles = evaluateRailwaySourceCnossos.getVehicleFromTrain(train); + Map vehicles = railway.getVehicleFromTrainset(train); // double vehiclePerHouri=vehiclePerHour; if (vehicles!=null){ int i = 0; @@ -262,23 +283,23 @@ public RailWayLW getRailwayEmissionFromResultSet(ResultSet rs, String period) th String typeTrain = entry.getKey(); double vehiclePerHouri = vehiclePerHour * entry.getValue(); if (vehiclePerHouri>0) { - RailwayVehicleParametersCnossos vehicleParameters = new RailwayVehicleParametersCnossos(typeTrain, vehicleSpeed, + RailwayVehicleCnossosParameters vehicleParameters = new RailwayVehicleCnossosParameters(typeTrain, vehicleSpeed, vehiclePerHouri / (double) nbTrack, rollingCondition, idlingTime); if (i == 0) { - lWRailWay = evaluateRailwaySourceCnossos.evaluate(vehicleParameters, trackParameters); + lWRailWay = railway.evaluate(vehicleParameters, trackParameters); } else { - lWRailWay = RailWayLW.sumRailWayLW(lWRailWay, evaluateRailwaySourceCnossos.evaluate(vehicleParameters, trackParameters)); + lWRailWay = RailWayCnossosParameters.sumRailwaySource(lWRailWay, railway.evaluate(vehicleParameters, trackParameters)); } } i++; } - }else if (evaluateRailwaySourceCnossos.isInVehicleList(train)){ + }else if (railway.isInVehicleList(train)){ if (vehiclePerHour>0) { - RailwayVehicleParametersCnossos vehicleParameters = new RailwayVehicleParametersCnossos(train, vehicleSpeed, + RailwayVehicleCnossosParameters vehicleParameters = new RailwayVehicleCnossosParameters(train, vehicleSpeed, vehiclePerHour / (double) nbTrack, rollingCondition, idlingTime); - lWRailWay = evaluateRailwaySourceCnossos.evaluate(vehicleParameters, trackParameters); + lWRailWay = railway.evaluate(vehicleParameters, trackParameters); } } @@ -287,10 +308,10 @@ public RailWayLW getRailwayEmissionFromResultSet(ResultSet rs, String period) th public static class RailWayLWGeom { - private RailWayLW railWayLW; - private RailWayLW railWayLWDay; - private RailWayLW railWayLWEvening; - private RailWayLW railWayLWNight; + private RailWayCnossosParameters railWayLW; + private RailWayCnossosParameters railWayLWDay; + private RailWayCnossosParameters railWayLWEvening; + private RailWayCnossosParameters railWayLWNight; private List geometry; private int pk = -1; private int nbTrack; @@ -316,7 +337,7 @@ public RailWayLWGeom(RailWayLWGeom other) { this.gs = other.gs; } - public RailWayLWGeom(RailWayLW railWayLW, RailWayLW railWayLWDay, RailWayLW railWayLWEvening, RailWayLW railWayLWNight, List geometry, int pk, int nbTrack, double distance, double gs) { + public RailWayLWGeom(RailWayCnossosParameters RailWayParameters, RailWayCnossosParameters railWayLWDay, RailWayCnossosParameters railWayLWEvening, RailWayCnossosParameters railWayLWNight, List geometry, int pk, int nbTrack, double distance, double gs) { this.railWayLW = railWayLW; this.railWayLWDay = railWayLWDay; this.railWayLWEvening = railWayLWEvening; @@ -344,32 +365,32 @@ public void setDistance(double distance) { this.distance = distance; } - public RailWayLW getRailWayLW() { + public RailWayParameters getRailWayLW() { return railWayLW; } - public void setRailWayLW(RailWayLW railWayLW) { + public void setRailWayLW(RailWayCnossosParameters railWayLW) { this.railWayLW = railWayLW; } - public RailWayLW getRailWayLWDay() { + public RailWayParameters getRailWayLWDay() { return railWayLWDay; } - public void setRailWayLWDay(RailWayLW railWayLWDay) { + public void setRailWayLWDay(RailWayCnossosParameters railWayLWDay) { this.railWayLWDay = railWayLWDay; } - public RailWayLW getRailWayLWEvening() { + public RailWayParameters getRailWayLWEvening() { return railWayLWEvening; } - public void setRailWayLWEvening(RailWayLW railWayLWEvening) { + public void setRailWayLWEvening(RailWayCnossosParameters railWayLWEvening) { this.railWayLWEvening = railWayLWEvening; } - public RailWayLW getRailWayLWNight() { + public RailWayParameters getRailWayLWNight() { return railWayLWNight; } - public void setRailWayLWNight(RailWayLW railWayLWNight) { + public void setRailWayLWNight(RailWayCnossosParameters railWayLWNight) { this.railWayLWNight = railWayLWNight; } diff --git a/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/utils/MakeLWTable.java b/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/utils/MakeLWTable.java index cea4907e5..21c36bcec 100644 --- a/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/utils/MakeLWTable.java +++ b/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/utils/MakeLWTable.java @@ -4,15 +4,14 @@ import org.h2gis.functions.spatial.edit.ST_UpdateZ; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.LineString; -import org.noise_planet.noisemodelling.emission.RailWayLW; -import org.noise_planet.noisemodelling.jdbc.LDENConfig; +import org.noise_planet.noisemodelling.emission.railway.RailWayParameters; import org.noise_planet.noisemodelling.jdbc.RailWayLWIterator; import org.noise_planet.noisemodelling.pathfinder.CnossosPropagationData; -import org.noise_planet.noisemodelling.propagation.PropagationProcessPathData; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; +import java.util.Arrays; import java.util.List; /** @@ -76,62 +75,71 @@ public static void makeTrainLWTable(Connection connection, String railSectionTab while (railWayLWIterator.hasNext()) { RailWayLWIterator.RailWayLWGeom railWayLWGeom = railWayLWIterator.next(); - RailWayLW railWayLWDay = railWayLWGeom.getRailWayLWDay(); - RailWayLW railWayLWEvening = railWayLWGeom.getRailWayLWEvening(); - RailWayLW railWayLWNight = railWayLWGeom.getRailWayLWNight(); + RailWayParameters railWayLWDay = railWayLWGeom.getRailWayLWDay(); + RailWayParameters railWayLWEvening = railWayLWGeom.getRailWayLWEvening(); + RailWayParameters railWayLWNight = railWayLWGeom.getRailWayLWNight(); List geometries = railWayLWGeom.getRailWayLWGeometry(); int pk = railWayLWGeom.getPK(); - double[] LWDay = new double[0]; - double[] LWEvening = new double[0]; - double[] LWNight = new double[0]; + double[] LWDay = new double[CnossosPropagationData.DEFAULT_FREQUENCIES_THIRD_OCTAVE.length]; + double[] LWEvening = new double[CnossosPropagationData.DEFAULT_FREQUENCIES_THIRD_OCTAVE.length]; + double[] LWNight = new double[CnossosPropagationData.DEFAULT_FREQUENCIES_THIRD_OCTAVE.length]; + Arrays.fill(LWDay, -99.00); + Arrays.fill(LWEvening, -99.00); + Arrays.fill(LWNight, -99.00); double heightSource = 0; int directivityId = 0; - for (int iSource = 0; iSource < 6; iSource++) { + boolean day = (railWayLWDay.getRailwaySourceList().size()>0); + boolean evening = (railWayLWEvening.getRailwaySourceList().size()>0); + boolean night = (railWayLWNight.getRailwaySourceList().size()>0); + for (int iSource = 0; iSource < 6; iSource++) { + + heightSource = 0; switch (iSource) { case 0: - LWDay = railWayLWDay.getLWRolling(); - LWEvening = railWayLWEvening.getLWRolling(); - LWNight = railWayLWNight.getLWRolling(); - heightSource = 0.5; + if (day) LWDay = railWayLWDay.getRailwaySourceList().get("ROLLING").getlW(); + if (evening) LWEvening = railWayLWEvening.getRailwaySourceList().get("ROLLING").getlW(); + if (night) LWNight = railWayLWNight.getRailwaySourceList().get("ROLLING").getlW(); + if (day) heightSource = 4; //railWayLWDay.getRailwaySourceList().get("ROLLING").getSourceHeight(); directivityId = 1; break; case 1: - LWDay = railWayLWDay.getLWTractionA(); - LWEvening = railWayLWEvening.getLWTractionA(); - LWNight = railWayLWNight.getLWTractionA(); + if (day) LWDay = railWayLWDay.getRailwaySourceList().get("TRACTIONA").getlW(); + if (evening) LWEvening = railWayLWEvening.getRailwaySourceList().get("TRACTIONA").getlW(); + if (night) LWNight = railWayLWNight.getRailwaySourceList().get("TRACTIONA").getlW(); heightSource = 0.5; directivityId = 2; break; case 2: - LWDay = railWayLWDay.getLWTractionB(); - LWEvening = railWayLWEvening.getLWTractionB(); - LWNight = railWayLWNight.getLWTractionB(); + if (day) LWDay = railWayLWDay.getRailwaySourceList().get("TRACTIONB").getlW(); + if (evening) LWEvening = railWayLWEvening.getRailwaySourceList().get("TRACTIONB").getlW(); + if (night) LWNight = railWayLWNight.getRailwaySourceList().get("TRACTIONB").getlW(); heightSource = 4; directivityId = 3; break; case 3: - LWDay = railWayLWDay.getLWAerodynamicA(); - LWEvening = railWayLWEvening.getLWAerodynamicA(); - LWNight = railWayLWNight.getLWAerodynamicA(); + if (day) LWDay = railWayLWDay.getRailwaySourceList().get("AERODYNAMICA").getlW(); + if (evening) LWEvening = railWayLWEvening.getRailwaySourceList().get("AERODYNAMICA").getlW(); + if (night) LWNight = railWayLWNight.getRailwaySourceList().get("AERODYNAMICA").getlW(); heightSource = 0.5; directivityId = 4; break; case 4: - LWDay = railWayLWDay.getLWAerodynamicB(); - LWEvening = railWayLWEvening.getLWAerodynamicB(); - LWNight = railWayLWNight.getLWAerodynamicB(); + if (day) LWDay = railWayLWDay.getRailwaySourceList().get("AERODYNAMICB").getlW(); + if (evening) LWEvening = railWayLWEvening.getRailwaySourceList().get("AERODYNAMICB").getlW(); + if (night) LWNight = railWayLWNight.getRailwaySourceList().get("AERODYNAMICB").getlW(); heightSource = 4; directivityId = 5; break; case 5: - LWDay = railWayLWDay.getLWBridge(); - LWEvening = railWayLWEvening.getLWBridge(); - LWNight = railWayLWNight.getLWBridge(); + if (day) LWDay = railWayLWDay.getRailwaySourceList().get("BRIDGE").getlW(); + if (evening) LWEvening = railWayLWEvening.getRailwaySourceList().get("BRIDGE").getlW(); + if (night) LWNight = railWayLWNight.getRailwaySourceList().get("BRIDGE").getlW(); heightSource = 0.5; directivityId = 6; break; } + PreparedStatement ps = connection.prepareStatement(insertIntoQuery.toString()); for (Geometry trackGeometry : geometries) { diff --git a/noisemodelling-jdbc/src/test/java/org/noise_planet/noisemodelling/jdbc/DirectivityTableLoaderTest.java b/noisemodelling-jdbc/src/test/java/org/noise_planet/noisemodelling/jdbc/DirectivityTableLoaderTest.java index 7e022d7d4..b5b90125c 100644 --- a/noisemodelling-jdbc/src/test/java/org/noise_planet/noisemodelling/jdbc/DirectivityTableLoaderTest.java +++ b/noisemodelling-jdbc/src/test/java/org/noise_planet/noisemodelling/jdbc/DirectivityTableLoaderTest.java @@ -5,8 +5,10 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; -import org.noise_planet.noisemodelling.emission.DiscreteDirectionAttributes; -import org.noise_planet.noisemodelling.emission.RailWayLW; +import org.noise_planet.noisemodelling.emission.LineSource; +import org.noise_planet.noisemodelling.emission.directivity.DiscreteDirectivitySphere; +import org.noise_planet.noisemodelling.emission.railway.cnossos.RailWayCnossosParameters; + import java.sql.Connection; import java.sql.PreparedStatement; @@ -42,7 +44,9 @@ public void testFetch() throws SQLException { try(Statement st = connection.createStatement()) { st.execute("CREATE TABLE DIRTEST(DIR_ID INTEGER, THETA FLOAT, PHI FLOAT, LW63 FLOAT, LW125 FLOAT, LW250 FLOAT, LW500 FLOAT, LW1000 FLOAT, LW2000 FLOAT, LW4000 FLOAT, LW8000 FLOAT)"); } - RailWayLW.TrainAttenuation att = new RailWayLW.TrainAttenuation(RailWayLW.TrainNoiseSource.TRACTIONB); + + RailWayCnossosParameters.RailwayDirectivitySphere att = new RailWayCnossosParameters.RailwayDirectivitySphere(new LineSource("TRACTIONB")); + try(PreparedStatement st = connection.prepareStatement("INSERT INTO DIRTEST VALUES(?,?,?,?,?,?,?,?,?,?,?)")) { for(int yaw = 0; yaw < 360; yaw += 5) { double phi = Math.toRadians(yaw); @@ -65,14 +69,14 @@ public void testFetch() throws SQLException { } // Data is inserted now fetch it from the database - Map directivities = DirectivityTableLoader.loadTable(connection, "DIRTEST", 1); + Map directivities = DirectivityTableLoader.loadTable(connection, "DIRTEST", 1); assertEquals(1, directivities.size()); assertTrue(directivities.containsKey(1)); - DiscreteDirectionAttributes d = directivities.get(1); - for(DiscreteDirectionAttributes.DirectivityRecord directivityRecord : d.getRecordsTheta()) { + DiscreteDirectivitySphere d = directivities.get(1); + for(DiscreteDirectivitySphere.DirectivityRecord directivityRecord : d.getRecordsTheta()) { double[] attSpectrum = att.getAttenuationArray(freqTest, directivityRecord.getPhi(), directivityRecord.getTheta()); assertArrayEquals(attSpectrum, directivityRecord.getAttenuation(), 1e-2); } diff --git a/noisemodelling-jdbc/src/test/java/org/noise_planet/noisemodelling/jdbc/DirectivityTest.java b/noisemodelling-jdbc/src/test/java/org/noise_planet/noisemodelling/jdbc/DirectivityTest.java index 8a6ee47bb..a94ed7f6f 100644 --- a/noisemodelling-jdbc/src/test/java/org/noise_planet/noisemodelling/jdbc/DirectivityTest.java +++ b/noisemodelling-jdbc/src/test/java/org/noise_planet/noisemodelling/jdbc/DirectivityTest.java @@ -3,8 +3,8 @@ import org.h2gis.functions.factory.H2GISDBFactory; import org.h2gis.utilities.JDBCUtilities; import org.junit.Test; -import org.noise_planet.noisemodelling.emission.DiscreteDirectionAttributes; -import org.noise_planet.noisemodelling.emission.RailWayLW; +import org.noise_planet.noisemodelling.emission.directivity.DiscreteDirectivitySphere; +import org.noise_planet.noisemodelling.emission.railway.nmpb.RailWayNMPBParameters; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -43,7 +43,7 @@ public void exportDirectivityCardioid() throws Exception { pst.execute(); // DEBUG st.execute("UPDATE DIRECTIVITY SET LW500=-10 WHERE THETA=45 AND PHI=270 "); // Data is inserted now fetch it from the database - Map directivities = + Map directivities = DirectivityTableLoader.loadTable(connection, "DIRECTIVITY", 1); try(BufferedWriter bw = new BufferedWriter(new FileWriter("target/cardioid_dir.html"))) { @@ -72,7 +72,7 @@ public void exportDirectivityCardioid() throws Exception { "" + "

500 Hz

\n"); Logger logger = LoggerFactory.getLogger(DirectivityTest.class); - for (Map.Entry entry : directivities.entrySet()) { + for (Map.Entry entry : directivities.entrySet()) { // DEBUG logger.info(String.format("phi 0 theta 0 %f", // entry.getValue().getAttenuation(500, Math.toRadians(0), Math.toRadians(0)))); bw.write("
"); @@ -102,10 +102,10 @@ public void exportDirectivityCardioid() throws Exception { public void exportDirectivityDiscrete() throws IOException { - DiscreteDirectionAttributes noiseSource = new DiscreteDirectionAttributes(1, freqTest); + DiscreteDirectivitySphere noiseSource = new DiscreteDirectivitySphere(1, freqTest); noiseSource.setInterpolationMethod(1); - RailWayLW.TrainAttenuation att = new RailWayLW.TrainAttenuation(RailWayLW.TrainNoiseSource.ROLLING); + RailWayNMPBParameters.TrainAttenuation att = new RailWayNMPBParameters.TrainAttenuation(RailWayNMPBParameters.TrainNoiseSource.ROLLING); for(int yaw = 0; yaw < 360; yaw += 5) { double phi = Math.toRadians(yaw); @@ -141,20 +141,20 @@ public void exportDirectivityDiscrete() throws IOException { "}" + "" + "

500 Hz

\n"); - bw.write("
"); - bw.write("
"); - bw.write(polarGraphDirectivity.generatePolarGraph(noiseSource, 500, - -35, 0, PolarGraphDirectivity.ORIENTATION.TOP)); - bw.write(String.format(Locale.ROOT, "

%s Horizontal

", "Discrete directivity")); - bw.write("
"); - bw.write(polarGraphDirectivity.generatePolarGraph(noiseSource, 500, - -35, 0, PolarGraphDirectivity.ORIENTATION.SIDE)); - bw.write(String.format(Locale.ROOT, "

%s Side

", "Discrete directivity")); - bw.write("
"); + bw.write("
"); + bw.write("
"); + bw.write(polarGraphDirectivity.generatePolarGraph(noiseSource, 500, + -35, 0, PolarGraphDirectivity.ORIENTATION.TOP)); + bw.write(String.format(Locale.ROOT, "

%s Horizontal

", "Discrete directivity")); + bw.write("
"); + bw.write(polarGraphDirectivity.generatePolarGraph(noiseSource, 500, + -35, 0, PolarGraphDirectivity.ORIENTATION.SIDE)); + bw.write(String.format(Locale.ROOT, "

%s Side

", "Discrete directivity")); + bw.write("
"); bw.write("\n" + "\n "); } } -} +} \ No newline at end of file diff --git a/noisemodelling-jdbc/src/test/java/org/noise_planet/noisemodelling/jdbc/EvaluateAttenuationCnossosTest.java b/noisemodelling-jdbc/src/test/java/org/noise_planet/noisemodelling/jdbc/EvaluateAttenuationCnossosTest.java index 0352564b9..3a221db70 100644 --- a/noisemodelling-jdbc/src/test/java/org/noise_planet/noisemodelling/jdbc/EvaluateAttenuationCnossosTest.java +++ b/noisemodelling-jdbc/src/test/java/org/noise_planet/noisemodelling/jdbc/EvaluateAttenuationCnossosTest.java @@ -21,7 +21,6 @@ import java.util.stream.IntStream; import static java.lang.Double.NaN; -import static java.lang.Double.max; import static org.junit.Assert.*; import static org.noise_planet.noisemodelling.jdbc.Utils.addArray; import static org.noise_planet.noisemodelling.pathfinder.utils.PowerUtils.*; diff --git a/noisemodelling-jdbc/src/test/java/org/noise_planet/noisemodelling/jdbc/LDENPointNoiseMapFactoryTest.java b/noisemodelling-jdbc/src/test/java/org/noise_planet/noisemodelling/jdbc/LDENPointNoiseMapFactoryTest.java index d567e7158..ce8e86151 100644 --- a/noisemodelling-jdbc/src/test/java/org/noise_planet/noisemodelling/jdbc/LDENPointNoiseMapFactoryTest.java +++ b/noisemodelling-jdbc/src/test/java/org/noise_planet/noisemodelling/jdbc/LDENPointNoiseMapFactoryTest.java @@ -14,7 +14,10 @@ import org.junit.Test; import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.LineString; -import org.noise_planet.noisemodelling.emission.RailWayLW; +import org.noise_planet.noisemodelling.emission.LineSource; +import org.noise_planet.noisemodelling.emission.railway.RailWayParameters; +import org.noise_planet.noisemodelling.emission.railway.cnossos.RailwayCnossos; +import org.noise_planet.noisemodelling.emission.utils.Utils; import org.noise_planet.noisemodelling.jdbc.utils.MakeLWTable; import org.noise_planet.noisemodelling.pathfinder.IComputeRaysOut; import org.noise_planet.noisemodelling.pathfinder.ProfileBuilder; @@ -42,6 +45,8 @@ public class LDENPointNoiseMapFactoryTest { static Logger LOGGER = LoggerFactory.getLogger(LDENPointNoiseMapFactoryTest.class); + RailwayCnossos railway = new RailwayCnossos(); + private Connection connection; @@ -117,7 +122,8 @@ public void testNoiseEmissionRailWay() throws SQLException, IOException { assertTrue(rs.next()); expectedNumberOfRows = rs.getInt(1); } - RailWayLWIterator railWayLWIterator = new RailWayLWIterator(connection,"RAILTRACK", "RAILTRAIN"); + RailWayLWIterator railWayLWIterator = new RailWayLWIterator(connection,"RAILTRACK", "RAILTRAIN","RailwayVehiclesCnossos.json","RailwayTrainsets.json", "RailwayCnossosSNCF_2021.json"); + int numberOfRows = 0; while (railWayLWIterator.hasNext()) { RailWayLWIterator.RailWayLWGeom v = railWayLWIterator.next(); @@ -208,7 +214,7 @@ public void testNoiseEmissionRailWay_OC5() throws SQLException, IOException { RailWayLWIterator.RailWayLWGeom v = railWayLWIterator.next(); assertNotNull(v); v.setNbTrack(2); - RailWayLW railWayLW = v.getRailWayLW(); + RailWayParameters railWayLW = v.getRailWayLW(); List geometries = v.getRailWayLWGeometry(); v = railWayLWIterator.next(); @@ -225,40 +231,46 @@ public void testNoiseEmissionRailWay_BM() throws SQLException, IOException { HashMap Resultats = new HashMap<>(); - RailWayLWIterator railWayLWIterator = new RailWayLWIterator(connection,"RAILTRACK", "RAILTRAIN"); + RailWayLWIterator railWayLWIterator = new RailWayLWIterator(connection,"RAILTRACK", "RAILTRAIN","RailwayVehiclesCnossos.json","RailwayTrainsets.json", "RailwayCnossosSNCF_2021.json"); double resD,resE,resN; while (railWayLWIterator.hasNext()) { RailWayLWIterator.RailWayLWGeom v = railWayLWIterator.next(); - RailWayLW railWayLW = v.getRailWayLWDay(); - double[] rolling = railWayLW.getLWRolling(); - double[] tractiona = railWayLW.getLWTractionA(); - double[] tractionb = railWayLW.getLWTractionB(); - double[] aeroa = railWayLW.getLWAerodynamicA(); - double[] aerob = railWayLW.getLWAerodynamicB(); - double[] LW = sumDbArray(sumDbArray(sumDbArray(sumDbArray(rolling, tractiona), tractionb), aeroa), aerob); - double[] LWA = sumArray(LW, dBA); + RailWayParameters railWayLW = v.getRailWayLWDay(); + double[] lW = new double[24]; + Arrays.fill(lW, -99.00); + + if (railWayLW.getRailwaySourceList().size()>0){ + for (Map.Entry railwaySourceEntry : railWayLW.getRailwaySourceList().entrySet()) { + double[] lW1 = railwaySourceEntry.getValue().getlW(); + lW = Utils.sumDbArray(lW, lW1); + } + } + + double[] LWA = sumArray(lW, dBA); resD = sumDbArray(LWA); railWayLW = v.getRailWayLWEvening(); - rolling = railWayLW.getLWRolling(); - tractiona = railWayLW.getLWTractionA(); - tractionb = railWayLW.getLWTractionB(); - aeroa = railWayLW.getLWAerodynamicA(); - aerob = railWayLW.getLWAerodynamicB(); - LW = sumDbArray(sumDbArray(sumDbArray(sumDbArray(rolling, tractiona), tractionb), aeroa), aerob); - LWA = sumArray(LW, dBA); + Arrays.fill(lW, -99.00); + if (railWayLW.getRailwaySourceList().size()>0){ + for (Map.Entry railwaySourceEntry : railWayLW.getRailwaySourceList().entrySet()) { + double[] lW1 = railwaySourceEntry.getValue().getlW(); + lW = Utils.sumDbArray(lW, lW1); + } + } + LWA = sumArray(lW, dBA); resE = sumDbArray(LWA); railWayLW = v.getRailWayLWNight(); - rolling = railWayLW.getLWRolling(); - tractiona = railWayLW.getLWTractionA(); - tractionb = railWayLW.getLWTractionB(); - aeroa = railWayLW.getLWAerodynamicA(); - aerob = railWayLW.getLWAerodynamicB(); - LW = sumDbArray(sumDbArray(sumDbArray(sumDbArray(rolling, tractiona), tractionb), aeroa), aerob); - LWA = sumArray(LW, dBA); + Arrays.fill(lW, -99.00); + if (railWayLW.getRailwaySourceList().size()>0){ + for (Map.Entry railwaySourceEntry : railWayLW.getRailwaySourceList().entrySet()) { + double[] lW1 = railwaySourceEntry.getValue().getlW(); + lW = Utils.sumDbArray(lW, lW1); + } + } + LWA = sumArray(lW, dBA); resN = sumDbArray(LWA); String idSection = v.getIdSection(); @@ -289,34 +301,41 @@ public void testNoiseEmissionRailWay_Section556() throws SQLException, IOExcepti while (railWayLWIterator.hasNext()) { RailWayLWIterator.RailWayLWGeom v = railWayLWIterator.next(); - RailWayLW railWayLW = v.getRailWayLWDay(); - double[] rolling = railWayLW.getLWRolling(); - double[] tractiona = railWayLW.getLWTractionA(); - double[] tractionb = railWayLW.getLWTractionB(); - double[] aeroa = railWayLW.getLWAerodynamicA(); - double[] aerob = railWayLW.getLWAerodynamicB(); - double[] LW = sumDbArray(sumDbArray(sumDbArray(sumDbArray(rolling, tractiona), tractionb), aeroa), aerob); - double[] LWA = sumArray(LW, dBA); + RailWayParameters railWayLW = v.getRailWayLWDay(); + + double[] lW = new double[24]; + Arrays.fill(lW, -99.00); + + if (railWayLW.getRailwaySourceList().size()>0){ + for (Map.Entry railwaySourceEntry : railWayLW.getRailwaySourceList().entrySet()) { + double[] lW1 = railwaySourceEntry.getValue().getlW(); + lW = Utils.sumDbArray(lW, lW1); + } + } + + double[] LWA = sumArray(lW, dBA); resD = sumDbArray(LWA); railWayLW = v.getRailWayLWEvening(); - rolling = railWayLW.getLWRolling(); - tractiona = railWayLW.getLWTractionA(); - tractionb = railWayLW.getLWTractionB(); - aeroa = railWayLW.getLWAerodynamicA(); - aerob = railWayLW.getLWAerodynamicB(); - LW = sumDbArray(sumDbArray(sumDbArray(sumDbArray(rolling, tractiona), tractionb), aeroa), aerob); - LWA = sumArray(LW, dBA); + Arrays.fill(lW, -99.00); + if (railWayLW.getRailwaySourceList().size()>0){ + for (Map.Entry railwaySourceEntry : railWayLW.getRailwaySourceList().entrySet()) { + double[] lW1 = railwaySourceEntry.getValue().getlW(); + lW = Utils.sumDbArray(lW, lW1); + } + } + LWA = sumArray(lW, dBA); resE = sumDbArray(LWA); railWayLW = v.getRailWayLWNight(); - rolling = railWayLW.getLWRolling(); - tractiona = railWayLW.getLWTractionA(); - tractionb = railWayLW.getLWTractionB(); - aeroa = railWayLW.getLWAerodynamicA(); - aerob = railWayLW.getLWAerodynamicB(); - LW = sumDbArray(sumDbArray(sumDbArray(sumDbArray(rolling, tractiona), tractionb), aeroa), aerob); - LWA = sumArray(LW, dBA); + Arrays.fill(lW, -99.00); + if (railWayLW.getRailwaySourceList().size()>0){ + for (Map.Entry railwaySourceEntry : railWayLW.getRailwaySourceList().entrySet()) { + double[] lW1 = railwaySourceEntry.getValue().getlW(); + lW = Utils.sumDbArray(lW, lW1); + } + } + LWA = sumArray(lW, dBA); resN = sumDbArray(LWA); String idSection = v.getIdSection(); @@ -325,41 +344,6 @@ public void testNoiseEmissionRailWay_Section556() throws SQLException, IOExcepti } - /*RailWayLWIterator.RailWayLWGeom v = railWayLWIterator.next(); - RailWayLW railWayLW = v.getRailWayLWDay(); - double[] rolling = railWayLW.getLWRolling(); - double[] tractiona = railWayLW.getLWTractionA(); - double[] tractionb = railWayLW.getLWTractionB(); - double[] aeroa = railWayLW.getLWAerodynamicA(); - double[] aerob = railWayLW.getLWAerodynamicB(); - double[] LW = sumDbArray(sumDbArray(sumDbArray(sumDbArray(rolling, tractiona), tractionb), aeroa), aerob); - double[] LWA = sumArray(LW, dBA); - double resD = sumDbArray(LWA); - - railWayLW = v.getRailWayLWEvening(); - rolling = railWayLW.getLWRolling(); - tractiona = railWayLW.getLWTractionA(); - tractionb = railWayLW.getLWTractionB(); - aeroa = railWayLW.getLWAerodynamicA(); - aerob = railWayLW.getLWAerodynamicB(); - LW = sumDbArray(sumDbArray(sumDbArray(sumDbArray(rolling, tractiona), tractionb), aeroa), aerob); - LWA = sumArray(LW, dBA); - double resE = sumDbArray(LWA); - - railWayLW = v.getRailWayLWNight(); - rolling = railWayLW.getLWRolling(); - tractiona = railWayLW.getLWTractionA(); - tractionb = railWayLW.getLWTractionB(); - aeroa = railWayLW.getLWAerodynamicA(); - aerob = railWayLW.getLWAerodynamicB();* - /* LW = sumDbArray(sumDbArray(sumDbArray(sumDbArray(rolling, tractiona), tractionb), aeroa), aerob); - LWA = sumArray(LW, dBA); - double resN = sumDbArray(LWA);*/ - - /*String idSection = v.getIdSection(); - Resultats.put(idSection,new double[]{resD, resE, resN}); - v = railWayLWIterator.next();*/ - assertFalse(railWayLWIterator.hasNext()); } diff --git a/noisemodelling-jdbc/src/test/java/org/noise_planet/noisemodelling/jdbc/PointNoiseMapTest.java b/noisemodelling-jdbc/src/test/java/org/noise_planet/noisemodelling/jdbc/PointNoiseMapTest.java index 1fa254623..cc6de7d52 100644 --- a/noisemodelling-jdbc/src/test/java/org/noise_planet/noisemodelling/jdbc/PointNoiseMapTest.java +++ b/noisemodelling-jdbc/src/test/java/org/noise_planet/noisemodelling/jdbc/PointNoiseMapTest.java @@ -3,7 +3,6 @@ import org.h2gis.api.EmptyProgressVisitor; import org.h2gis.functions.factory.H2GISDBFactory; import org.h2gis.utilities.JDBCUtilities; -import org.h2gis.utilities.dbtypes.DBUtils; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -12,11 +11,9 @@ import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.GeometryFactory; import org.locationtech.jts.io.WKTWriter; -import org.noise_planet.noisemodelling.emission.RailWayLW; import org.noise_planet.noisemodelling.jdbc.Utils.JDBCComputeRaysOut; import org.noise_planet.noisemodelling.jdbc.Utils.JDBCPropagationData; import org.noise_planet.noisemodelling.pathfinder.*; -import org.noise_planet.noisemodelling.pathfinder.utils.PowerUtils; import org.noise_planet.noisemodelling.propagation.ComputeRaysOutAttenuation; import org.noise_planet.noisemodelling.propagation.PropagationProcessPathData; @@ -230,7 +227,7 @@ public void testPointDirectivity() throws Exception { st.execute("CREATE TABLE BUILDINGS(pk serial PRIMARY KEY, the_geom geometry, height real)"); st.execute(createSource(new GeometryFactory().createPoint(new Coordinate(223915.72,6757480.22,0.0 )), 91, new Orientation(90,15,0), - RailWayLW.TrainNoiseSource.TRACTIONB.ordinal() + 1)); + 4)); st.execute("create table receivers(id serial PRIMARY KEY, the_geom GEOMETRY(POINTZ));\n" + "insert into receivers(the_geom) values ('POINTZ (223915.72 6757490.22 0.0)');" + "insert into receivers(the_geom) values ('POINTZ (223925.72 6757480.22 0.0)');"); @@ -303,8 +300,7 @@ public void testLineDirectivity() throws Exception { st.execute(createSource(new GeometryFactory().createLineString( new Coordinate[]{new Coordinate(223915.72,6757480.22 ,5), new Coordinate(223920.72,6757485.22, 5.1 )}), 91, - new Orientation(0,0,0), - RailWayLW.TrainNoiseSource.TRACTIONB.ordinal() + 1)); + new Orientation(0,0,0),4)); st.execute("create table receivers(id serial PRIMARY KEY, the_geom GEOMETRY(pointZ));\n" + "insert into receivers(the_geom) values ('POINTZ (223922.55 6757495.27 0.0)');" + "insert into receivers(the_geom) values ('POINTZ (223936.42 6757471.91 0.0)');"); @@ -388,8 +384,7 @@ public void testPointRayDirectivity() throws Exception { st.execute("CREATE TABLE BUILDINGS(pk serial PRIMARY KEY, the_geom geometry, height real)"); // create source point direction east->90° st.execute(createSource(new GeometryFactory().createPoint(new Coordinate(3.5,3,1.0 )), - 91, new Orientation(90,0,0), - RailWayLW.TrainNoiseSource.TRACTIONB.ordinal() + 1)); + 91, new Orientation(90,0,0),4)); st.execute("create table receivers(id serial PRIMARY KEY, the_geom GEOMETRY(POINTZ));\n" + "insert into receivers(the_geom) values ('POINTZ (4.5 3 1.0)');" + //front "insert into receivers(the_geom) values ('POINTZ (2.5 3 1.0)');" + //behind diff --git a/wps_scripts/src/main/groovy/org/noise_planet/noisemodelling/wps/Experimental/Road_Emission_From_AADF.groovy b/wps_scripts/src/main/groovy/org/noise_planet/noisemodelling/wps/Experimental/Road_Emission_From_AADF.groovy index 2c7edc450..59a85769e 100644 --- a/wps_scripts/src/main/groovy/org/noise_planet/noisemodelling/wps/Experimental/Road_Emission_From_AADF.groovy +++ b/wps_scripts/src/main/groovy/org/noise_planet/noisemodelling/wps/Experimental/Road_Emission_From_AADF.groovy @@ -15,8 +15,8 @@ import org.h2gis.utilities.SpatialResultSet import org.h2gis.utilities.TableLocation import org.h2gis.utilities.wrapper.ConnectionWrapper import org.locationtech.jts.geom.Geometry -import org.noise_planet.noisemodelling.emission.EvaluateRoadSourceCnossos -import org.noise_planet.noisemodelling.emission.RoadSourceParametersCnossos +import org.noise_planet.noisemodelling.emission.road.cnossos.RoadCnossos +import org.noise_planet.noisemodelling.emission.road.cnossos.RoadCnossosParameters import org.noise_planet.noisemodelling.pathfinder.CnossosPropagationData import java.sql.Connection @@ -250,11 +250,11 @@ static double[][] computeLw(Long pk, Geometry geom, SpatialResultSet rs) throws hgvPerHour = tmja * HV_PERCENTAGE * (hv_hourly_distribution[h] / 100.0); int idFreq = 0; for (int freq : CnossosPropagationData.freq_lvl) { - RoadSourceParametersCnossos rsParametersCnossos = new RoadSourceParametersCnossos(speedLv, speedMv, speedHgv, speedWav, + RoadCnossosParameters rsParametersCnossos = new RoadCnossosParameters(speedLv, speedMv, speedHgv, speedWav, speedWbv, lvPerHour, mvPerHour, hgvPerHour, wavPerHour, wbvPerHour, freq, Temperature, roadSurface, Ts_stud, Pm_stud, Junc_dist, Junc_type); rsParametersCnossos.setSpeedFromRoadCaracteristics(speed_lv, speed_lv, false, speed_lv, roadType); - ld[idFreq++] += EvaluateRoadSourceCnossos.evaluate(rsParametersCnossos) + ld[idFreq++] += RoadCnossos.evaluate(rsParametersCnossos) } } // Average @@ -268,11 +268,11 @@ static double[][] computeLw(Long pk, Geometry geom, SpatialResultSet rs) throws mvPerHour = tmja * HV_PERCENTAGE * (hv_hourly_distribution[h] / 100.0) int idFreq = 0 for(int freq : CnossosPropagationData.freq_lvl) { - RoadSourceParametersCnossos rsParametersCnossos = new RoadSourceParametersCnossos(speedLv, speedMv, speedHgv, speedWav, + RoadCnossosParameters rsParametersCnossos = new RoadCnossosParameters(speedLv, speedMv, speedHgv, speedWav, speedWbv, lvPerHour, mvPerHour, hgvPerHour, wavPerHour, wbvPerHour, freq, Temperature, roadSurface, Ts_stud, Pm_stud, Junc_dist, Junc_type); rsParametersCnossos.setSpeedFromRoadCaracteristics(speed_lv, speed_lv, false, speed_lv, roadType) - le[idFreq++] += EvaluateRoadSourceCnossos.evaluate(rsParametersCnossos) + le[idFreq++] += RoadCnossos.evaluate(rsParametersCnossos) } } @@ -286,11 +286,11 @@ static double[][] computeLw(Long pk, Geometry geom, SpatialResultSet rs) throws mvPerHour = tmja * HV_PERCENTAGE * (hv_hourly_distribution[h] / 100.0) int idFreq = 0 for(int freq : CnossosPropagationData.freq_lvl) { - RoadSourceParametersCnossos rsParametersCnossos = new RoadSourceParametersCnossos(speedLv, speedMv, speedHgv, speedWav, + RoadCnossosParameters rsParametersCnossos = new RoadCnossosParameters(speedLv, speedMv, speedHgv, speedWav, speedWbv, lvPerHour, mvPerHour, hgvPerHour, wavPerHour, wbvPerHour, freq, Temperature, roadSurface, Ts_stud, Pm_stud, Junc_dist, Junc_type); rsParametersCnossos.setSpeedFromRoadCaracteristics(speed_lv, speed_lv, false, speed_lv, roadType) - ln[idFreq++] += EvaluateRoadSourceCnossos.evaluate(rsParametersCnossos) + ln[idFreq++] += RoadCnossos.evaluate(rsParametersCnossos) } } for(int i=0; i directivityData; + Map directivityData; if (input['tableSourceDirectivity']) { tableSourceDirectivity = input['tableSourceDirectivity'] // do it case-insensitive @@ -127,8 +120,8 @@ def exec(Connection connection, input) { } else { directivityData = new HashMap<>(); directivityData.put(0, new LDENPropagationProcessData.OmnidirectionalDirection()); - for(RailWayLW.TrainNoiseSource noiseSource : RailWayLW.TrainNoiseSource.values()) { - directivityData.put(noiseSource.ordinal() + 1, new RailWayLW.TrainAttenuation(noiseSource)); + for(RailWayNMPBParameters.TrainNoiseSource noiseSource : RailWayLW.TrainNoiseSource.values()) { + directivityData.put(noiseSource.ordinal() + 1, new RailWayNMPBParameters.TrainAttenuation(noiseSource)); } } @@ -158,8 +151,7 @@ def exec(Connection connection, input) { if (input['confScaleMaximum']) { scaleMaximum = input['confScaleMaximum'] as Double } - - DirectionAttributes directionAttributes = directivityData.get(directivityIndex) + directionAttributes = directivityData.get(directivityIndex) PolarGraphDirectivity polarGraphDirectivity = new PolarGraphDirectivity() StringBuilder sb = new StringBuilder() sb.append("

Top

") diff --git a/wps_scripts/src/main/groovy/org/noise_planet/noisemodelling/wps/NoiseModelling/Railway_Emission_from_Traffic.groovy b/wps_scripts/src/main/groovy/org/noise_planet/noisemodelling/wps/NoiseModelling/Railway_Emission_from_Traffic.groovy index 599885d64..f11314557 100644 --- a/wps_scripts/src/main/groovy/org/noise_planet/noisemodelling/wps/NoiseModelling/Railway_Emission_from_Traffic.groovy +++ b/wps_scripts/src/main/groovy/org/noise_planet/noisemodelling/wps/NoiseModelling/Railway_Emission_from_Traffic.groovy @@ -17,31 +17,19 @@ import geoserver.GeoServer import geoserver.catalog.Store import groovy.sql.Sql import org.geotools.jdbc.JDBCDataStore -import org.h2gis.functions.spatial.convert.ST_Force3D -import org.h2gis.functions.spatial.edit.ST_AddZ -import org.h2gis.functions.spatial.edit.ST_UpdateZ import org.h2gis.utilities.GeometryMetaData import org.h2gis.utilities.GeometryTableUtilities import org.h2gis.utilities.SpatialResultSet import org.h2gis.utilities.TableLocation import org.h2gis.utilities.dbtypes.DBUtils import org.h2gis.utilities.wrapper.ConnectionWrapper -import org.locationtech.jts.geom.Geometry -import org.locationtech.jts.geom.LineString -import org.noise_planet.noisemodelling.emission.RailWayLW -import org.noise_planet.noisemodelling.jdbc.LDENConfig -import org.noise_planet.noisemodelling.jdbc.RailWayLWIterator import org.noise_planet.noisemodelling.jdbc.utils.MakeLWTable -import org.noise_planet.noisemodelling.pathfinder.CnossosPropagationData -import org.noise_planet.noisemodelling.propagation.PropagationProcessPathData import org.slf4j.Logger import org.slf4j.LoggerFactory import java.sql.Connection import java.sql.PreparedStatement import java.sql.SQLException -import java.sql.Statement - /** * @Author Pierre Aumond, Univ Gustave Eiffel * @Author Adrien Le Bellec, Univ Gustave Eiffel diff --git a/wps_scripts/src/main/groovy/org/noise_planet/noisemodelling/wps/NoiseModelling/Road_Emission_from_Traffic.groovy b/wps_scripts/src/main/groovy/org/noise_planet/noisemodelling/wps/NoiseModelling/Road_Emission_from_Traffic.groovy index 0fa57ce64..54e654b0a 100644 --- a/wps_scripts/src/main/groovy/org/noise_planet/noisemodelling/wps/NoiseModelling/Road_Emission_from_Traffic.groovy +++ b/wps_scripts/src/main/groovy/org/noise_planet/noisemodelling/wps/NoiseModelling/Road_Emission_from_Traffic.groovy @@ -20,19 +20,16 @@ import geoserver.GeoServer import geoserver.catalog.Store import groovy.sql.Sql import org.geotools.jdbc.JDBCDataStore -import org.h2gis.utilities.JDBCUtilities import org.h2gis.utilities.GeometryTableUtilities +import org.h2gis.utilities.JDBCUtilities import org.h2gis.utilities.SpatialResultSet import org.h2gis.utilities.TableLocation import org.h2gis.utilities.wrapper.ConnectionWrapper import org.locationtech.jts.geom.Geometry - -import org.noise_planet.noisemodelling.emission.* -import org.noise_planet.noisemodelling.pathfinder.* -import org.noise_planet.noisemodelling.propagation.* -import org.noise_planet.noisemodelling.jdbc.* +import org.noise_planet.noisemodelling.jdbc.LDENConfig +import org.noise_planet.noisemodelling.jdbc.LDENPropagationProcessData import org.noise_planet.noisemodelling.pathfinder.utils.PowerUtils - +import org.noise_planet.noisemodelling.propagation.PropagationProcessPathData import org.slf4j.Logger import org.slf4j.LoggerFactory diff --git a/wps_scripts/src/main/groovy/org/noise_planet/noisemodelling/wps/NoiseModelling/Traffic_Probabilistic_Modelling.groovy b/wps_scripts/src/main/groovy/org/noise_planet/noisemodelling/wps/NoiseModelling/Traffic_Probabilistic_Modelling.groovy index c657ca442..0dd45d556 100644 --- a/wps_scripts/src/main/groovy/org/noise_planet/noisemodelling/wps/NoiseModelling/Traffic_Probabilistic_Modelling.groovy +++ b/wps_scripts/src/main/groovy/org/noise_planet/noisemodelling/wps/NoiseModelling/Traffic_Probabilistic_Modelling.groovy @@ -28,15 +28,16 @@ import org.h2gis.utilities.SpatialResultSet import org.h2gis.utilities.TableLocation import org.h2gis.utilities.wrapper.ConnectionWrapper import org.locationtech.jts.geom.Geometry - -import org.noise_planet.noisemodelling.emission.* +import org.noise_planet.noisemodelling.emission.road.cnossos.RoadCnossos +import org.noise_planet.noisemodelling.emission.road.cnossos.RoadCnossosParameters +import org.noise_planet.noisemodelling.emission.road.cnossosvar.RoadVehicleCnossosvar +import org.noise_planet.noisemodelling.emission.road.cnossosvar.RoadVehicleCnossosvarParameters import org.noise_planet.noisemodelling.pathfinder.* import org.noise_planet.noisemodelling.propagation.* import org.noise_planet.noisemodelling.jdbc.* import java.sql.Connection -import java.sql.ResultSet import java.sql.SQLException title = 'Road traffic probabilistic modeling' @@ -626,28 +627,28 @@ class WpsPropagationProcessDataProba extends CnossosPropagationData { // Day int idFreq = 0 for (int freq : freq_lvl) { - RoadSourceParametersCnossos rsParametersCnossos = new RoadSourceParametersCnossos(lvSpeedD, hvSpeedD, hvSpeedD, lvSpeedD, + RoadCnossosParameters rsParametersCnossos = new RoadCnossosParameters(lvSpeedD, hvSpeedD, hvSpeedD, lvSpeedD, lvSpeedD, Math.max(0, tvD - hvD), 0, hvD, 0, 0, freq, Temperature, pavement, Ts_stud, Pm_stud, Junc_dist, Junc_type) - ld[idFreq++] += EvaluateRoadSourceCnossos.evaluate(rsParametersCnossos) + ld[idFreq++] += RoadCnossos.evaluate(rsParametersCnossos) } // Evening idFreq = 0 for (int freq : freq_lvl) { - RoadSourceParametersCnossos rsParametersCnossos = new RoadSourceParametersCnossos(lvSpeedE, hvSpeedE, hvSpeedE, lvSpeedE, + RoadCnossosParameters rsParametersCnossos = new RoadCnossosParameters(lvSpeedE, hvSpeedE, hvSpeedE, lvSpeedE, lvSpeedE, Math.max(0, tvE - hvE), 0, hvE, 0, 0, freq, Temperature, pavement, Ts_stud, Pm_stud, Junc_dist, Junc_type) - le[idFreq++] += EvaluateRoadSourceCnossos.evaluate(rsParametersCnossos) + le[idFreq++] += RoadCnossos.evaluate(rsParametersCnossos) } // Night idFreq = 0 for (int freq : freq_lvl) { - RoadSourceParametersCnossos rsParametersCnossos = new RoadSourceParametersCnossos(lvSpeedN, hvSpeedN, hvSpeedN, lvSpeedN, + RoadCnossosParameters rsParametersCnossos = new RoadCnossosParameters(lvSpeedN, hvSpeedN, hvSpeedN, lvSpeedN, lvSpeedN, Math.max(0, tvN - hvN), 0, hvN, 0, 0, freq, Temperature, pavement, Ts_stud, Pm_stud, Junc_dist, Junc_type) - ln[idFreq++] += EvaluateRoadSourceCnossos.evaluate(rsParametersCnossos) + ln[idFreq++] += RoadCnossos.evaluate(rsParametersCnossos) } @@ -752,11 +753,11 @@ class WpsPropagationProcessDataProba extends CnossosPropagationData { hgvPerHour = tmja * HV_PERCENTAGE * (hv_hourly_distribution[h] / 100.0); int idFreq = 0; for (int freq : freq_lvl) { - RoadSourceParametersCnossos rsParametersCnossos = new RoadSourceParametersCnossos(speedLv, speedMv, speedHgv, speedWav, + RoadCnossosParameters rsParametersCnossos = new RoadCnossosParameters(speedLv, speedMv, speedHgv, speedWav, speedWbv, lvPerHour, mvPerHour, hgvPerHour, wavPerHour, wbvPerHour, freq, Temperature, roadSurface, Ts_stud, Pm_stud, Junc_dist, Junc_type); rsParametersCnossos.setSpeedFromRoadCaracteristics(speed_lv, speed_lv, false, speed_lv, roadType); - ld[idFreq++] += EvaluateRoadSourceCnossos.evaluate(rsParametersCnossos) + ld[idFreq++] += RoadCnossos.evaluate(rsParametersCnossos) } } // Average @@ -770,11 +771,11 @@ class WpsPropagationProcessDataProba extends CnossosPropagationData { mvPerHour = tmja * HV_PERCENTAGE * (hv_hourly_distribution[h] / 100.0) int idFreq = 0 for (int freq : freq_lvl) { - RoadSourceParametersCnossos rsParametersCnossos = new RoadSourceParametersCnossos(speedLv, speedMv, speedHgv, speedWav, + RoadCnossosParameters rsParametersCnossos = new RoadCnossosParameters(speedLv, speedMv, speedHgv, speedWav, speedWbv, lvPerHour, mvPerHour, hgvPerHour, wavPerHour, wbvPerHour, freq, Temperature, roadSurface, Ts_stud, Pm_stud, Junc_dist, Junc_type); rsParametersCnossos.setSpeedFromRoadCaracteristics(speed_lv, speed_lv, false, speed_lv, roadType) - le[idFreq++] += EvaluateRoadSourceCnossos.evaluate(rsParametersCnossos) + le[idFreq++] += RoadCnossos.evaluate(rsParametersCnossos) } } @@ -788,11 +789,11 @@ class WpsPropagationProcessDataProba extends CnossosPropagationData { mvPerHour = tmja * HV_PERCENTAGE * (hv_hourly_distribution[h] / 100.0) int idFreq = 0 for (int freq : freq_lvl) { - RoadSourceParametersCnossos rsParametersCnossos = new RoadSourceParametersCnossos(speedLv, speedMv, speedHgv, speedWav, + RoadCnossosParameters rsParametersCnossos = new RoadCnossosParameters(speedLv, speedMv, speedHgv, speedWav, speedWbv, lvPerHour, mvPerHour, hgvPerHour, wavPerHour, wbvPerHour, freq, Temperature, roadSurface, Ts_stud, Pm_stud, Junc_dist, Junc_type); rsParametersCnossos.setSpeedFromRoadCaracteristics(speed_lv, speed_lv, false, speed_lv, roadType) - ln[idFreq++] += EvaluateRoadSourceCnossos.evaluate(rsParametersCnossos) + ln[idFreq++] += RoadCnossos.evaluate(rsParametersCnossos) } } for (int i = 0; i < ln.size(); i++) { @@ -866,10 +867,10 @@ class ProbabilisticProcessData { double LwStd = 1 int VehId = 10 - RoadSourceParametersDynamic rsParameters = new RoadSourceParametersDynamic(speed, acc, veh_type, acc_type, FreqParam, Temperature, RoadSurface, Stud, Junc_dist, Junc_type, LwStd, VehId) + RoadVehicleCnossosvarParameters rsParameters = new RoadVehicleCnossosvarParameters(speed, acc, veh_type, acc_type, FreqParam, Temperature, RoadSurface, Stud, Junc_dist, Junc_type, LwStd, VehId) rsParameters.setSlopePercentage(0) - res_LV[kk] = EvaluateRoadSourceDynamic.evaluate(rsParameters) + res_LV[kk] = RoadVehicleCnossosvar.evaluate(rsParameters) kk++ } @@ -890,10 +891,10 @@ class ProbabilisticProcessData { double LwStd = 1 int VehId = 10 - RoadSourceParametersDynamic rsParameters = new RoadSourceParametersDynamic(speed, acc, veh_type, acc_type, FreqParam, Temperature, RoadSurface, Stud, Junc_dist, Junc_type, LwStd, VehId) + RoadVehicleCnossosvarParameters rsParameters = new RoadVehicleCnossosvarParameters(speed, acc, veh_type, acc_type, FreqParam, Temperature, RoadSurface, Stud, Junc_dist, Junc_type, LwStd, VehId) rsParameters.setSlopePercentage(0) - res_HV[kk] = EvaluateRoadSourceDynamic.evaluate(rsParameters) + res_HV[kk] = RoadVehicleCnossosvar.evaluate(rsParameters) kk++ } }