Index: DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/Deltares.Dam.Tests.csproj =================================================================== diff -u -r4933 -r4936 --- DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/Deltares.Dam.Tests.csproj (.../Deltares.Dam.Tests.csproj) (revision 4933) +++ DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/Deltares.Dam.Tests.csproj (.../Deltares.Dam.Tests.csproj) (revision 4936) @@ -53,6 +53,9 @@ PreserveNewest + + PreserveNewest + @@ -1352,11 +1355,6 @@ - - PreserveNewest - - - PreserveNewest Index: DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/IO/CombineImportedDataTest.cs =================================================================== diff -u -r4933 -r4936 --- DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/IO/CombineImportedDataTest.cs (.../CombineImportedDataTest.cs) (revision 4933) +++ DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/IO/CombineImportedDataTest.cs (.../CombineImportedDataTest.cs) (revision 4936) @@ -147,7 +147,7 @@ Assert.That(damProjectData.WaterBoard.Dikes[0].Scenarios.Count, Is.EqualTo(19652)); // Check aquifer data - var aquifers = damProjectData.WaterBoard.Dikes[0].ImportedCsvAquifers; + var aquifers = damProjectData.WaterBoard.Dikes[0].Aquifers; Assert.That(aquifers.Count, Is.EqualTo(4)); Assert.That(aquifers[0].StixFileName, Is.EqualTo("DWP_1.stix")); Assert.That(aquifers[0].LayerName, Is.EqualTo("L1")); Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Dike.cs =================================================================== diff -u -r4933 -r4936 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Dike.cs (.../Dike.cs) (revision 4933) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Dike.cs (.../Dike.cs) (revision 4936) @@ -57,6 +57,7 @@ private IList pl1Lines; private SoilList soilList; private IList soilProfiles; + private IList aquifers; public Dike() { @@ -118,6 +119,12 @@ set => soilList = value; } + public virtual IList Aquifers + { + get => aquifers; + set => aquifers = value; + } + [Browsable(false)] public virtual IList Gauges { get; set; } = new List(); [Browsable(false)] public virtual IList GaugePLLines { get; set; } = new List(); @@ -299,10 +306,10 @@ { return; } - + Aquifers = new List(); foreach (CsvImporterAquifers.AquiferRecord aquiferRecord in aquiferRecords) { - Aquifer aquifer = ImportedCsvAquifers.Find(sc => sc.StixFileName == aquiferRecord.StixFileName && sc.LayerName == aquiferRecord.LayerName); + Aquifer aquifer = Aquifers.Find(sc => sc.StixFileName == aquiferRecord.StixFileName && sc.LayerName == aquiferRecord.LayerName); if (aquifer != null) { continue; @@ -312,7 +319,7 @@ StixFileName = aquiferRecord.StixFileName, LayerName = aquiferRecord.LayerName }; - ImportedCsvAquifers.Add(aquifer); + Aquifers.Add(aquifer); } } @@ -415,7 +422,6 @@ internal List ImportedCsvSoils { get; } = new(); internal List ImportedCsvStressCurves { get; } = new(); - internal List ImportedCsvAquifers { get; } = new(); /// /// Tries to make the soil data as read for 1D profiles consistent with the data in the soil database. Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillXmlInputFromDamUi.cs =================================================================== diff -u -r4817 -r4936 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillXmlInputFromDamUi.cs (.../FillXmlInputFromDamUi.cs) (revision 4817) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillXmlInputFromDamUi.cs (.../FillXmlInputFromDamUi.cs) (revision 4936) @@ -62,6 +62,7 @@ List filteredJobs = FilterLocationJobsWithSoilProfiles(damProjectData.SelectedLocationJobs, soilProfileDirectory, dike.SoilList, + dike.Aquifers, soilProfiles2DToSerialize).ToList(); List filteredLocations = filteredJobs.Select(loc => loc.Location).ToList(); @@ -749,6 +750,7 @@ private static IEnumerable FilterLocationJobsWithSoilProfiles(IEnumerable locationJobs, string soilProfileDirectory, SoilList availableSoils, + IEnumerable aquifers, ICollection containedSoilProfiles) { var validJobs = new List(); @@ -758,7 +760,7 @@ Location location = locationJob.Location; try { - foreach (SoilProfile2D soilProfile in GetSoilProfiles(soilProfileDirectory, location.Segment, availableSoils)) + foreach (SoilProfile2D soilProfile in GetSoilProfiles(soilProfileDirectory, location.Segment, availableSoils, aquifers)) { string soilProfileName = soilProfile.Name; if (!uniqueSoilProfileNames.Contains(soilProfileName)) @@ -805,9 +807,9 @@ /// An array of . /// Thrown when the soil profiles could not be successfully imported. /// Thrown when the soil profiles could not be successfully converted. - private static IEnumerable GetSoilProfiles(string soilProfileDirectory, Segment segment, SoilList soils) + private static IEnumerable GetSoilProfiles(string soilProfileDirectory, Segment segment, SoilList soils, IEnumerable aquifers) { - IEnumerable importedSoilProfiles = SoilProfile2DImporter.Import(soilProfileDirectory, segment, soils); + IEnumerable importedSoilProfiles = SoilProfile2DImporter.Import(soilProfileDirectory, segment, soils, aquifers); return importedSoilProfiles.Select(XmlSoilProfile2DConverter.Convert).ToArray(); } } \ No newline at end of file Index: DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/TestData/Geometry2DImporter/DWP_Sand.stix =================================================================== diff -u Binary files differ Index: DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/TestData/Geometry2DImporter/DWP_1.stix =================================================================== diff -u -r4868 -r4936 Binary files differ Index: DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/Geometry2DImporter/SoilProfile2DImporterTest.cs =================================================================== diff -u -r4869 -r4936 --- DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/Geometry2DImporter/SoilProfile2DImporterTest.cs (.../SoilProfile2DImporterTest.cs) (revision 4869) +++ DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/Geometry2DImporter/SoilProfile2DImporterTest.cs (.../SoilProfile2DImporterTest.cs) (revision 4936) @@ -45,7 +45,7 @@ public void Import_InvalidSoilProfileDirectory_ThrowsArgumentException(string invalidSoilProfileDirectory) { // Call - TestDelegate call = () => SoilProfile2DImporter.Import(invalidSoilProfileDirectory, new Segment(), new SoilList()); + TestDelegate call = () => SoilProfile2DImporter.Import(invalidSoilProfileDirectory, new Segment(), new SoilList(), null); // Assert Assert.That(call, Throws.ArgumentException @@ -56,7 +56,7 @@ public void Import_SegmentNull_ThrowsArgumentNullException() { // Call - TestDelegate call = () => SoilProfile2DImporter.Import(string.Empty, null, new SoilList()); + TestDelegate call = () => SoilProfile2DImporter.Import(string.Empty, null, new SoilList(), null); // Assert Assert.That(call, Throws.TypeOf() @@ -68,7 +68,7 @@ public void Import_AvailableSoilsNull_ThrowsArgumentNullException() { // Call - TestDelegate call = () => SoilProfile2DImporter.Import(string.Empty, new Segment(), null); + TestDelegate call = () => SoilProfile2DImporter.Import(string.Empty, new Segment(), null, null); // Assert Assert.That(call, Throws.TypeOf() @@ -96,7 +96,7 @@ }); // Call - IEnumerable soilProfiles = SoilProfile2DImporter.Import(StiTestDataFolder, segment, availableSoils); + IEnumerable soilProfiles = SoilProfile2DImporter.Import(StiTestDataFolder, segment, availableSoils, null); // Assert Assert.That(soilProfiles.Count, Is.EqualTo(2)); @@ -142,7 +142,7 @@ }); // Call - IEnumerable soilProfiles = SoilProfile2DImporter.Import(StiTestDataFolder, segment, availableSoils); + IEnumerable soilProfiles = SoilProfile2DImporter.Import(StiTestDataFolder, segment, availableSoils, null); // Assert Assert.That(soilProfiles.Count, Is.EqualTo(2)); @@ -184,7 +184,7 @@ "Muck" }); - Assert.That(() => SoilProfile2DImporter.Import(StiTestDataFolder, segment, availableSoils), + Assert.That(() => SoilProfile2DImporter.Import(StiTestDataFolder, segment, availableSoils, null), Throws.Exception.TypeOf().With.Message.EqualTo($"'{invalidSoilProfile}' contains the undefined soil: Sand.")); } @@ -203,15 +203,15 @@ "Muck" }); - Assert.That(() => SoilProfile2DImporter.Import(StiTestDataFolder, segment, availableSoils), + Assert.That(() => SoilProfile2DImporter.Import(StiTestDataFolder, segment, availableSoils, null), Throws.TypeOf().With.Message.Contains($"Could not import soil profile '{invalidSoilProfileName}': ")); } [Test] public void WhenStixFileIsImported_ThenSoilProfile2DHasValidGeometry() { // Setup - const string fileName = "DWP_1.stix"; + const string fileName = "DWP_Sand.stix"; Segment segment = CreateSegmentWithProfiles(new[] { fileName @@ -224,15 +224,40 @@ "klei antropogeen (1)", "zand antropogeen (1)" }); + var aquifers = new[] + { + new Aquifer + { + StixFileName = fileName, + LayerName = "Sand" // there are 2 layers with the name "Sand" in the stix file + }, + new Aquifer + { + StixFileName = fileName, + LayerName = "L 11" + } + }; // Call - IEnumerable soilProfiles = SoilProfile2DImporter.Import(StixTestDataFolder, segment, availableSoils); + IEnumerable soilProfiles = SoilProfile2DImporter.Import(StixTestDataFolder, segment, availableSoils, aquifers); // Assert GeometryData geometry = soilProfiles.ElementAt(0).Geometry; Assert.That(geometry.Surfaces, Has.Count.EqualTo(12)); ValidationResult[] validationResults = geometry.ValidateGeometry(); Assert.That(validationResults, Has.Length.EqualTo(0)); + for (var index = 0; index < soilProfiles.ElementAt(0).Surfaces.Count; index++) + { + var surface = soilProfiles.ElementAt(0).Surfaces[index]; + if (index == 0 || index == 1 || index == 10) + { + Assert.That(surface.IsAquifer, Is.True); + } + else + { + Assert.That(surface.IsAquifer, Is.False); + } + } } private static Segment CreateSegmentWithProfiles(IEnumerable soilProfileNames) Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Geometry2DImporter/SoilProfile2DImporter.cs =================================================================== diff -u -r4878 -r4936 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Geometry2DImporter/SoilProfile2DImporter.cs (.../SoilProfile2DImporter.cs) (revision 4878) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Geometry2DImporter/SoilProfile2DImporter.cs (.../SoilProfile2DImporter.cs) (revision 4936) @@ -47,7 +47,7 @@ /// is null, empty or consist of only whitespaces. /// /// Thrown when the soil profiles could not be successfully imported. - public static IEnumerable Import(string soilProfileDirectory, Segment segment, SoilList availableSoils) + public static IEnumerable Import(string soilProfileDirectory, Segment segment, SoilList availableSoils, IEnumerable aquifers) { if (segment == null) { @@ -71,7 +71,7 @@ foreach (SoilGeometryProbability profile in soilProfiles) { string profileName = profile.SoilGeometry2DName; - SoilProfile2D readSoilProfile = ReadSoilProfile(soilProfileDirectory, profileName); + SoilProfile2D readSoilProfile = ReadSoilProfile(soilProfileDirectory, profileName, aquifers); foreach (string soilName in readSoilProfile.Surfaces.Select(surface => surface.Soil.Name)) { if (!IsSoilOfSurfacePresent(availableSoils.Soils, soilName)) @@ -94,7 +94,7 @@ /// The name of the soil profile. /// A . /// Thrown when the soil profile could not be read. - private static SoilProfile2D ReadSoilProfile(string soilProfileDirectory, string soilProfileName) + private static SoilProfile2D ReadSoilProfile(string soilProfileDirectory, string soilProfileName, IEnumerable aquifers) { string soilProfileFileName = HasStiFileExtension(soilProfileName) ? soilProfileName : $"{soilProfileName}.sti"; string filePath = Path.Combine(soilProfileDirectory, soilProfileFileName); @@ -126,6 +126,7 @@ { var reader = new StixFileReader.StixFileReader(); SoilProfile2D readSoilProfile = reader.ReadSoilProfile(filePath); + TransferAquiferData(soilProfileFileName, readSoilProfile.Surfaces, aquifers.ToList()); readSoilProfile.Geometry.RegenerateGeometry(); return readSoilProfile; @@ -159,4 +160,16 @@ layer.WaterpressureInterpolationModel = WaterpressureInterpolationModel.Hydrostatic; } } + + private static void TransferAquiferData(string soilProfileFileName, IEnumerable soilLayers, IList aquifers) + { + foreach (SoilLayer2D layer in soilLayers) + { + Aquifer aquifer = aquifers.FirstOrDefault(a => a.StixFileName == soilProfileFileName && a.LayerName == layer.GeometrySurface.Name); + if (aquifer != null) + { + layer.IsAquifer = true; + } + } + } } \ No newline at end of file