From 410f479837b334766bffa37f207ae2bcac8c7979 Mon Sep 17 00:00:00 2001 From: nicolas-f <1382241+nicolas-f@users.noreply.github.com> Date: Fri, 13 Dec 2024 11:00:00 +0100 Subject: [PATCH] fix rayleigh --- .../noisemodelling/jdbc/NoiseMapInStack.java | 14 ++--- .../noisemodelling/jdbc/NoiseMapWriter.java | 4 +- .../jdbc/AttenuationCnossosTest.java | 51 ++++++++++--------- .../jdbc/NoiseMapByReceiverMakerTest.java | 10 ++-- .../propagation/Attenuation.java | 4 +- .../cnossos/CnossosPathBuilder.java | 4 +- 6 files changed, 45 insertions(+), 42 deletions(-) diff --git a/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/NoiseMapInStack.java b/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/NoiseMapInStack.java index 3499327f8..25e464a0b 100644 --- a/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/NoiseMapInStack.java +++ b/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/NoiseMapInStack.java @@ -58,8 +58,10 @@ public NoiseMapInStack(NoiseMap multiThreadParent) { double[] sumLevels(List wjSources,List receiverAttenuationLevels) { double[] levels = new double[noiseMapComputeRaysOut.dayPathData.freq_lvl.size()]; for (Attenuation.SourceReceiverAttenuation lvl : receiverAttenuationLevels) { - levels = sumArray(levels, - dbaToW(sumArray(wToDba(wjSources.get((int) lvl.source)), lvl.value))); + if(wjSources.size() > lvl.sourceId && lvl.sourceId >= 0) { + levels = sumArray(levels, + dbaToW(sumArray(wToDba(wjSources.get((int) lvl.sourceId)), lvl.value))); + } } return levels; } @@ -96,7 +98,7 @@ public PathSearchStrategy onNewCutPlane(CutProfile cutProfile) { /** * Get propagation path result - * @param sourceId Source identifier + * @param source Source identifier * @param sourceLi Source power per meter coefficient * @param pathsParameter Propagation path result */ @@ -257,11 +259,11 @@ public void finalizeReceiver(int receiverId) { AttenuationVisitor attenuationVisitor = lDENAttenuationVisitor[timePeriod.ordinal()]; for (Attenuation.SourceReceiverAttenuation lvl : attenuationVisitor.receiverAttenuationLevels) { NoiseMapParameters.TimePeriodParameters timePeriodParameters; - if (!levelsPerSourceLines.containsKey(lvl.source)) { + if (!levelsPerSourceLines.containsKey(lvl.sourceId)) { timePeriodParameters = new NoiseMapParameters.TimePeriodParameters(); - levelsPerSourceLines.put(lvl.source, timePeriodParameters); + levelsPerSourceLines.put(lvl.sourceId, timePeriodParameters); } else { - timePeriodParameters = levelsPerSourceLines.get(lvl.source); + timePeriodParameters = levelsPerSourceLines.get(lvl.sourceId); } if (timePeriodParameters.getTimePeriodLevel(timePeriod) == null) { timePeriodParameters.setTimePeriodLevel(timePeriod, lvl.value); diff --git a/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/NoiseMapWriter.java b/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/NoiseMapWriter.java index a7c146e83..fae625c7b 100644 --- a/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/NoiseMapWriter.java +++ b/noisemodelling-jdbc/src/main/java/org/noise_planet/noisemodelling/jdbc/NoiseMapWriter.java @@ -157,9 +157,9 @@ void processStack(String tableName, ConcurrentLinkedDeque maxGlobalValue) { maxGlobalValue = globalValue; - maxPowerReceiverIndex = (int) v.receiver; + maxPowerReceiverIndex = (int) v.receiverId; } } assertEquals(idReceiver, maxPowerReceiverIndex); @@ -8539,11 +8540,11 @@ public void testSourceLines() throws LayerDelaunayError, IOException, ParseExce // Merge levels for each receiver for point sources Map levelsPerReceiver = new HashMap<>(); for(Attenuation.SourceReceiverAttenuation lvl : propDataOut.receiversAttenuationLevels) { - if(!levelsPerReceiver.containsKey(lvl.receiver)) { - levelsPerReceiver.put(lvl.receiver, lvl.value); + if(!levelsPerReceiver.containsKey(lvl.receiverId)) { + levelsPerReceiver.put(lvl.receiverId, lvl.value); } else { // merge - levelsPerReceiver.put(lvl.receiver, sumDbArray(levelsPerReceiver.get(lvl.receiver), + levelsPerReceiver.put(lvl.receiverId, sumDbArray(levelsPerReceiver.get(lvl.receiverId), lvl.value)); } } @@ -8552,11 +8553,11 @@ public void testSourceLines() throws LayerDelaunayError, IOException, ParseExce // Merge levels for each receiver for lines sources Map levelsPerReceiverLines = new HashMap<>(); for(Attenuation.SourceReceiverAttenuation lvl : propDataOutTest.receiversAttenuationLevels) { - if(!levelsPerReceiverLines.containsKey(lvl.receiver)) { - levelsPerReceiverLines.put(lvl.receiver, lvl.value); + if(!levelsPerReceiverLines.containsKey(lvl.receiverId)) { + levelsPerReceiverLines.put(lvl.receiverId, lvl.value); } else { // merge - levelsPerReceiverLines.put(lvl.receiver, sumDbArray(levelsPerReceiverLines.get(lvl.receiver), + levelsPerReceiverLines.put(lvl.receiverId, sumDbArray(levelsPerReceiverLines.get(lvl.receiverId), lvl.value)); } } diff --git a/noisemodelling-jdbc/src/test/java/org/noise_planet/noisemodelling/jdbc/NoiseMapByReceiverMakerTest.java b/noisemodelling-jdbc/src/test/java/org/noise_planet/noisemodelling/jdbc/NoiseMapByReceiverMakerTest.java index 5c0c029be..8f68c5c2a 100644 --- a/noisemodelling-jdbc/src/test/java/org/noise_planet/noisemodelling/jdbc/NoiseMapByReceiverMakerTest.java +++ b/noisemodelling-jdbc/src/test/java/org/noise_planet/noisemodelling/jdbc/NoiseMapByReceiverMakerTest.java @@ -250,16 +250,16 @@ public void testPointDirectivity() throws Exception { NoiseMap rout = (NoiseMap) out; Attenuation.SourceReceiverAttenuation sl = rout.attenuatedPaths.lDenLevels.pop(); - assertEquals(1, sl.receiver); + assertEquals(1, sl.receiverId); assertEquals(73.3, sl.value[0], 1); sl = rout.attenuatedPaths.lDenLevels.pop(); - assertEquals(2, sl.receiver); + assertEquals(2, sl.receiverId); assertEquals(53.3, sl.value[0], 1); assertTrue(rout.attenuatedPaths.lDenLevels.isEmpty()); List pathsParameters = rout.getPropagationPaths(); assertEquals(2 , pathsParameters.size()); - //System.out.println("laaaaaa"+rout.getPropagationPaths()); + CnossosPath pathParameters = pathsParameters.remove(0); assertEquals(1, pathParameters.getIdReceiver()); assertEquals(new Orientation(90, 15, 0), pathParameters.getSourceOrientation()); @@ -334,10 +334,10 @@ public void testLineDirectivity() throws Exception { assertEquals(2, rout.attenuatedPaths.lDenLevels.size()); Attenuation.SourceReceiverAttenuation sl = rout.attenuatedPaths.lDenLevels.pop(); - assertEquals(1, sl.receiver); + assertEquals(1, sl.receiverId); assertEquals(68.3, sl.value[0], 1); sl = rout.attenuatedPaths.lDenLevels.pop(); - assertEquals(2, sl.receiver); + assertEquals(2, sl.receiverId); assertEquals(70.8, sl.value[0], 1); assertEquals(3 , rout.pathParameters.size()); diff --git a/noisemodelling-propagation/src/main/java/org/noise_planet/noisemodelling/propagation/Attenuation.java b/noisemodelling-propagation/src/main/java/org/noise_planet/noisemodelling/propagation/Attenuation.java index 33285defb..0b07c3dba 100644 --- a/noisemodelling-propagation/src/main/java/org/noise_planet/noisemodelling/propagation/Attenuation.java +++ b/noisemodelling-propagation/src/main/java/org/noise_planet/noisemodelling/propagation/Attenuation.java @@ -112,8 +112,8 @@ public double[] addPropagationPaths(CutPointSource source, CutPointReceiver rece } double[] aGlobalMeteo = computeCnossosAttenuation(genericMeteoData, source.id, source.li, path); if (aGlobalMeteo != null && aGlobalMeteo.length > 0) { - receiversAttenuationLevels.add(new SourceReceiverAttenuation(receiver, - source, aGlobalMeteo)); + receiversAttenuationLevels.add(new SourceReceiverAttenuation(receiver.receiverPk, + source.sourcePk, aGlobalMeteo)); return aGlobalMeteo; } else { return new double[0]; diff --git a/noisemodelling-propagation/src/main/java/org/noise_planet/noisemodelling/propagation/cnossos/CnossosPathBuilder.java b/noisemodelling-propagation/src/main/java/org/noise_planet/noisemodelling/propagation/cnossos/CnossosPathBuilder.java index 9eecbbf17..bb7548a07 100644 --- a/noisemodelling-propagation/src/main/java/org/noise_planet/noisemodelling/propagation/cnossos/CnossosPathBuilder.java +++ b/noisemodelling-propagation/src/main/java/org/noise_planet/noisemodelling/propagation/cnossos/CnossosPathBuilder.java @@ -47,8 +47,8 @@ public static void computeRayleighDiff(SegmentPath srSeg, CutProfile cutProfile, Coordinate rcv = pts2D.get(pts2D.size() - 1); CutPoint srcCut = cutProfile.getSource(); CutPoint rcvCut = cutProfile.getReceiver(); - for (int iO = 1; iO < pts2DGround.length - 1; iO++) { - int i0Cut = cut2DGroundIndex.indexOf(iO); + for (int i0Cut = 1; i0Cut < cuts.size() - 1; i0Cut++) { + int iO = cut2DGroundIndex.get(i0Cut); Coordinate o = pts2DGround[iO]; double dSO = src.distance(o);