Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/CsvImporters/CsvImporterSigmaTauCurves.cs
===================================================================
diff -u
--- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/CsvImporters/CsvImporterSigmaTauCurves.cs (revision 0)
+++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/CsvImporters/CsvImporterSigmaTauCurves.cs (revision 4544)
@@ -0,0 +1,117 @@
+// Copyright (C) Stichting Deltares 2024. All rights reserved.
+//
+// This file is part of the application DAM - UI.
+//
+// DAM - UI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+//
+// All names, logos, and references to "Deltares" are registered trademarks of
+// Stichting Deltares and remain full property of Stichting Deltares at all times.
+// All rights reserved.
+
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Threading;
+using Deltares.Dam.Data.Importers;
+using Deltares.Standard.IO;
+using Deltares.Standard.Language;
+using LumenWorks.Framework.IO.Csv;
+
+namespace Deltares.Dam.Data.CsvImporters;
+
+public class CsvImporterSigmaTauCurvesException(string message) : ApplicationException(message);
+
+public class CsvImporterSigmaTauCurves
+{
+ private readonly int currentColIndex = -1; // Keep track of column for error message
+
+ public CsvImporterSigmaTauCurves(string fileName)
+ {
+ ErrorMessages.Clear();
+ ThrowHelper.ThrowIfStringArgumentNullOrEmpty(fileName, StringResourceNames.CsvFileNotValid);
+ ThrowHelper.ThrowIfFileNotExist(fileName, StringResourceNames.CsvFileNotFound);
+ CultureInfo oldCultureInfo = Thread.CurrentThread.CurrentCulture;
+ try
+ {
+ Thread.CurrentThread.CurrentCulture = CsvReaderUtilities.DetermineCultureForFile(fileName);
+ using (var csv = new CsvReader(new StreamReader(fileName), true, ';'))
+ {
+ string[] headers = CsvImporterHelper.GetFieldHeaders(this, csv);
+ if (headers.Length < 2)
+ {
+ string csvHeaderError = LocalizationManager.GetTranslatedText(GetType(), "csvHeaderError");
+ throw new CsvImporterSoilsException($"{fileName} : {csvHeaderError}");
+ }
+
+ int colIndexSigmaTauCurveName = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.SigmaTauCurveNameColumnName);
+ CheckColumn(colIndexSigmaTauCurveName, fileName, CsvColumnNames.SoilNameColumnName);
+
+ int colIndexSigma = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.SigmaColumnName);
+ CheckColumn(colIndexSigma, fileName, CsvColumnNames.SigmaColumnName);
+
+ int colIndexTau = CsvReaderUtilities.GetHeaderIndexByString(headers, CsvColumnNames.TauColumnName);
+ CheckColumn(colIndexTau, fileName, CsvColumnNames.TauColumnName);
+
+ while (csv.ReadNextRecord())
+ {
+ var sigmaTauCurveRecord = new SigmaTauCurveRecord();
+ try
+ {
+ // Required columns
+ currentColIndex = colIndexSigmaTauCurveName;
+ sigmaTauCurveRecord.SigmaTauCurveName = csv[currentColIndex];
+
+ currentColIndex = colIndexSigma;
+ sigmaTauCurveRecord.Sigma = Convert.ToDouble(csv[currentColIndex]);
+
+ currentColIndex = colIndexTau;
+ sigmaTauCurveRecord.Tau = Convert.ToDouble(csv[currentColIndex]);
+
+ ImportedItems.Add(sigmaTauCurveRecord);
+ }
+ catch (Exception e)
+ {
+ string csvSigmaTauCurveError = string.Format(LocalizationManager.GetTranslatedText(GetType(), "csvSigmaTauCurveError"),
+ sigmaTauCurveRecord.SigmaTauCurveName, currentColIndex + 1);
+ ErrorMessages.Add(csvSigmaTauCurveError + e.Message);
+ }
+ }
+ }
+ }
+ finally
+ {
+ Thread.CurrentThread.CurrentCulture = oldCultureInfo;
+ }
+ }
+
+ public List ErrorMessages { get; } = new();
+ public List ImportedItems { get; } = new();
+
+ private void CheckColumn(int index, string fileName, string fieldName)
+ {
+ if (index < 0)
+ {
+ string csvHeaderFieldError = LocalizationManager.GetTranslatedText(GetType(), "csvHeaderFieldError");
+ throw new CsvImporterSigmaTauCurvesException($"{fileName} : {csvHeaderFieldError} {fieldName}");
+ }
+ }
+
+ public class SigmaTauCurveRecord
+ {
+ public string SigmaTauCurveName { get; set; }
+ public double Sigma { get; set; }
+ public double Tau { get; set; }
+ }
+}
\ No newline at end of file
Index: DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/CsvImporterTestsNew.cs
===================================================================
diff -u -r4539 -r4544
--- DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/CsvImporterTestsNew.cs (.../CsvImporterTestsNew.cs) (revision 4539)
+++ DamClients/DamUI/trunk/src/Dam/Deltares.Dam.Tests/CsvImporterTestsNew.cs (.../CsvImporterTestsNew.cs) (revision 4544)
@@ -818,7 +818,7 @@
CreateSoilProfilesFileWithIllegalHeader(testFilePath);
Assert.That(() => new CsvImporterSoils(testFilePath),
- Throws.InstanceOf().With.Message.Contains("The header misses the field: soil_type"));
+ Throws.InstanceOf().With.Message.Contains("The header misses the field: soil_color"));
}
[Test]
@@ -838,6 +838,58 @@
Assert.AreEqual(3, csvImporterSoils.ErrorMessages.Count);
}
+ [Test]
+ public void SigmaTauCurvesCorrectFileTest()
+ {
+ const string importFile = "sigmataucurves.csv";
+ string testFilePath = Path.Combine(importFolder, importFile);
+ if (File.Exists(testFilePath))
+ {
+ File.Delete(testFilePath);
+ }
+
+ CreateSigmaTauCurvesFile(testFilePath);
+ var csvImporterSigmaTauCurves = new CsvImporterSigmaTauCurves(testFilePath);
+ IList sigmaTauCurveRecords = csvImporterSigmaTauCurves.ImportedItems;
+
+ Assert.AreEqual("CurveKlei", sigmaTauCurveRecords[0].SigmaTauCurveName);
+ Assert.AreEqual(0.0, sigmaTauCurveRecords[0].Sigma);
+ Assert.AreEqual(2.05, sigmaTauCurveRecords[0].Tau);
+ Assert.AreEqual("CurveKlei", sigmaTauCurveRecords[1].SigmaTauCurveName);
+ Assert.AreEqual(13.0, sigmaTauCurveRecords[1].Sigma);
+ Assert.AreEqual(8.05, sigmaTauCurveRecords[1].Tau);
+ Assert.AreEqual("CurveKlei", sigmaTauCurveRecords[2].SigmaTauCurveName);
+ Assert.AreEqual(26.0, sigmaTauCurveRecords[2].Sigma);
+ Assert.AreEqual(13.79, sigmaTauCurveRecords[2].Tau);
+ Assert.AreEqual("CurveKlei", sigmaTauCurveRecords[3].SigmaTauCurveName);
+ Assert.AreEqual(65.0, sigmaTauCurveRecords[3].Sigma);
+ Assert.AreEqual(28.1, sigmaTauCurveRecords[3].Tau);
+ Assert.AreEqual("CurveKlei", sigmaTauCurveRecords[4].SigmaTauCurveName);
+ Assert.AreEqual(110.5, sigmaTauCurveRecords[4].Sigma);
+ Assert.AreEqual(44.6, sigmaTauCurveRecords[4].Tau);
+ Assert.AreEqual("CurveZand", sigmaTauCurveRecords[5].SigmaTauCurveName);
+ Assert.AreEqual(0.0, sigmaTauCurveRecords[5].Sigma);
+ Assert.AreEqual(0.0, sigmaTauCurveRecords[5].Tau);
+ Assert.AreEqual("CurveZand", sigmaTauCurveRecords[6].SigmaTauCurveName);
+ Assert.AreEqual(200.0, sigmaTauCurveRecords[6].Sigma);
+ Assert.AreEqual(129.88, sigmaTauCurveRecords[6].Tau);
+ }
+
+ [Test]
+ public void SigmaTauCurvesMissingColumnFileTest()
+ {
+ const string importFile = "sigmataucurves_missing_column.csv";
+ string testFilePath = Path.Combine(importFolder, importFile);
+ if (File.Exists(testFilePath))
+ {
+ File.Delete(testFilePath);
+ }
+
+ CreateSigmaTauCurvesMissingColumngFile(testFilePath);
+ Assert.That(() => new CsvImporterSigmaTauCurves(testFilePath),
+ Throws.InstanceOf().With.Message.Contains("The header misses the field: sigma"));
+ }
+
///
/// Create csv file with segments containing 1d soilprofiles
///
@@ -939,6 +991,30 @@
writer.WriteLine("Veen;#A4FFA6;Peat;11.000;11.000;2.000;20.500;210.00;0.001;None;;;0;10.000");
}
+ private static void CreateSigmaTauCurvesFile(string filePath)
+ {
+ using StreamWriter writer = File.CreateText(filePath);
+ writer.WriteLine("sigma_tau_curve_name;sigma;tau");
+ writer.WriteLine("CurveKlei;0.0;2.05");
+ writer.WriteLine("CurveKlei;13.0;8.05");
+ writer.WriteLine("CurveKlei;26.0;13.79");
+ writer.WriteLine("CurveKlei;65.0;28.10");
+ writer.WriteLine("CurveKlei;110.5;44.60");
+ writer.WriteLine("CurveZand;0.0;0.0");
+ writer.WriteLine("CurveZand;200.0;129.88");
+ }
+
+ private static void CreateSigmaTauCurvesMissingColumngFile(string filePath)
+ {
+ using StreamWriter writer = File.CreateText(filePath);
+ writer.WriteLine("sigma_tau_curve_name;tau");
+ writer.WriteLine("CurveKlei;2.05");
+ writer.WriteLine("CurveKlei;8.05");
+ writer.WriteLine("CurveKlei;13.79");
+ writer.WriteLine("CurveKlei;28.10");
+ writer.WriteLine("CurveKlei;44.60");
+ }
+
private static void CreateSoilProfilesFileWithIllegalHeader(string filePath)
{
using StreamWriter writer = File.CreateText(filePath);
Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/CsvImporters/CsvImporter.cs
===================================================================
diff -u -r4539 -r4544
--- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/CsvImporters/CsvImporter.cs (.../CsvImporter.cs) (revision 4539)
+++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/CsvImporters/CsvImporter.cs (.../CsvImporter.cs) (revision 4544)
@@ -39,6 +39,7 @@
private const string characteristicPointFileNamePart = "characteristicpoints";
private const string scenariosFileNamePart = "scenarios";
private const string soilsFileNamePart = "soils";
+ private const string sigmaTauCurvesFileNamePart = "sigma_tau_curves";
private string folderName;
public List ErrorMessages { get; } = new();
@@ -57,6 +58,8 @@
public List SoilsRecords { get; private set; } = new();
+ public List SigmaTauCurvesRecords { get; private set; } = new();
+
///
/// Imports the CSV data from directory.
///
@@ -108,6 +111,12 @@
ImportSoils(SoilsFileName);
}
+ if (File.Exists(SigmaTauCurvesFileName))
+ {
+ progress?.Invoke(0.29);
+ ImportSigmaTauCurves(SigmaTauCurvesFileName);
+ }
+
progress?.Invoke(0.30);
}
}
@@ -133,6 +142,8 @@
private string SoilsFileName => string.Format(filePattern, ImportFolderLocation, soilsFileNamePart);
+ private string SigmaTauCurvesFileName => string.Format(filePattern, ImportFolderLocation, sigmaTauCurvesFileNamePart);
+
///
/// Imports the locations.
///
@@ -152,7 +163,7 @@
ErrorMessages.Add(logMessage);
}
}
- catch (CsvImporterSegmentsException e)
+ catch (Exception e)
{
var logMessage = new LogMessage(LogMessageType.FatalError, this, e.Message);
ErrorMessages.Add(logMessage);
@@ -176,7 +187,7 @@
ErrorMessages.Add(logMessage);
}
}
- catch (CsvImporterSegmentsException e)
+ catch (Exception e)
{
var logMessage = new LogMessage(LogMessageType.FatalError, this, e.Message);
ErrorMessages.Add(logMessage);
@@ -199,7 +210,7 @@
ErrorMessages.Add(logMessage);
}
}
- catch (CsvImporterCharacteristicPointsException e)
+ catch (Exception e)
{
var logMessage = new LogMessage(LogMessageType.FatalError, this, e.Message);
ErrorMessages.Add(logMessage);
@@ -212,7 +223,7 @@
/// Name of the file.
private void ImportSoilProfiles(string fileName)
{
- // 1D Soilprofiles are not mandatory. The project can use 2D-geometries
+ // 1D SoilProfiles are not mandatory. The project can use 2D-geometries
if (File.Exists(fileName))
{
try
@@ -225,7 +236,7 @@
ErrorMessages.Add(logMessage);
}
}
- catch (CsvImporterSoilProfilesException e)
+ catch (Exception e)
{
var logMessage = new LogMessage(LogMessageType.FatalError, this, e.Message);
ErrorMessages.Add(logMessage);
@@ -249,7 +260,7 @@
ErrorMessages.Add(logMessage);
}
}
- catch (CsvImporterSurfaceLinesException e)
+ catch (Exception e)
{
var logMessage = new LogMessage(LogMessageType.FatalError, this, e.Message);
ErrorMessages.Add(logMessage);
@@ -272,11 +283,6 @@
ErrorMessages.Add(logMessage);
}
}
- catch (CsvImporterScenariosException e)
- {
- var logMessage = new LogMessage(LogMessageType.FatalError, this, e.Message);
- ErrorMessages.Add(logMessage);
- }
catch (Exception e)
{
var logMessage = new LogMessage(LogMessageType.FatalError, this, e.Message);
@@ -300,11 +306,29 @@
ErrorMessages.Add(logMessage);
}
}
- catch (CsvImporterSoilsException e)
+ catch (Exception e)
{
var logMessage = new LogMessage(LogMessageType.FatalError, this, e.Message);
ErrorMessages.Add(logMessage);
}
+ }
+
+ ///
+ /// Import the Sigma Tau Curves
+ ///
+ /// The filename of the file to read
+ private void ImportSigmaTauCurves(string fileName)
+ {
+ try
+ {
+ var csvImporterSigmaTauCurves = new CsvImporterSigmaTauCurves(fileName);
+ SigmaTauCurvesRecords = csvImporterSigmaTauCurves.ImportedItems;
+ foreach (string errorMessage in csvImporterSigmaTauCurves.ErrorMessages)
+ {
+ var logMessage = new LogMessage(LogMessageType.Error, this, errorMessage);
+ ErrorMessages.Add(logMessage);
+ }
+ }
catch (Exception e)
{
var logMessage = new LogMessage(LogMessageType.FatalError, this, e.Message);
Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Importers/CsvColumnNames.cs
===================================================================
diff -u -r4539 -r4544
--- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Importers/CsvColumnNames.cs (.../CsvColumnNames.cs) (revision 4539)
+++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Importers/CsvColumnNames.cs (.../CsvColumnNames.cs) (revision 4544)
@@ -431,6 +431,16 @@
public const string SigmaTauCurveNameColumnName = "sigma_tau_curve_name";
///
+ /// Normal effective stress
+ ///
+ public const string SigmaColumnName = "sigma";
+
+ ///
+ /// Shear strength
+ ///
+ public const string TauColumnName = "tau";
+
+ ///
/// strength_increase_exponent
///
public const string StrengthIncreaseExponentColumnName = "strength_increase_exponent";
Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Translations.xml
===================================================================
diff -u -r4539 -r4544
--- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Translations.xml (.../Translations.xml) (revision 4539)
+++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Translations.xml (.../Translations.xml) (revision 4544)
@@ -376,6 +376,9 @@
+