/// <summary> /// Performs the calculation by starting a Hydra-Ring process. /// </summary> /// <param name="workingDirectory">The directory of the process.</param> /// <param name="hydraRingInitializationService">The <see cref="HydraRingConfigurationService"/>.</param> /// <exception cref="Win32Exception">Thrown when there was an error in opening the associated file /// or the wait setting could not be accessed.</exception> private void PerformCalculation(string workingDirectory, HydraRingInitializationService hydraRingInitializationService) { hydraRingProcess = HydraRingProcessFactory.Create( hydraRingInitializationService.MechanismComputationExeFilePath, hydraRingInitializationService.IniFilePath, workingDirectory); hydraRingProcess.Start(); hydraRingProcess.WaitForExit(); hydraRingProcess.Close(); hydraRingProcess = null; }
public void GenerateInitializationScript_ReturnsExpectedInitializationScript( [Values("", "D:\\preprocessor")] string preprocessorDirectory, [Values(true, false)] bool usePreprocessorClosure) { // Setup const string hlcdFilePath = "D:\\hlcd\\HlcdFile.sqlite"; var settings = new HydraRingCalculationSettings(hlcdFilePath, preprocessorDirectory, usePreprocessorClosure); var hydraRingInitializationService = new HydraRingInitializationService(HydraRingFailureMechanismType.StructuresStructuralFailure, 700001, TestHelper.GetScratchPadPath(), settings); string expectedInitializationScript = "section = 700001" + Environment.NewLine + "mechanism = 112" + Environment.NewLine + "alternative = 1" + Environment.NewLine + "layer = 1" + Environment.NewLine + "logfile = 700001.log" + Environment.NewLine + "outputverbosity = basic" + Environment.NewLine + "outputtofile = file" + Environment.NewLine + "projectdbfilename = 700001.sql" + Environment.NewLine + "outputfilename = designTable.txt" + Environment.NewLine + "configdbfilename = " + Path.Combine(hydraRingDirectory, "config.sqlite") + Environment.NewLine + "hydraulicdbfilename = " + hlcdFilePath + Environment.NewLine + "designpointOutput = sqlite"; if (preprocessorDirectory != string.Empty) { expectedInitializationScript += Environment.NewLine + "preprocessordbdirectory = " + preprocessorDirectory; } if (usePreprocessorClosure) { expectedInitializationScript += Environment.NewLine + "preprocessorclosingdbfilename = D:\\hlcd\\HlcdFile_preprocClosure.sqlite"; } try { // Call hydraRingInitializationService.WriteInitializationScript(); // Assert string initializationScript = File.ReadAllText(hydraRingInitializationService.IniFilePath); Assert.AreEqual(expectedInitializationScript, initializationScript); } finally { File.Delete(hydraRingInitializationService.IniFilePath); } }
/// <summary> /// Executes the generic parsers of the calculation. /// </summary> /// <param name="hydraRingInitializationService">The <see cref="HydraRingInitializationService"/> to get the directory from.</param> /// <param name="sectionId">The id of the section of the calculation.</param> /// <exception cref="HydraRingFileParserException">Thrown when the HydraRing file parser /// encounters an error while parsing HydraRing output.</exception> /// <remarks>The <see cref="IllustrationPointsResult"/> is set to <c>null</c> when the <see cref="illustrationPointsParser"/> /// encounters an error.</remarks> private void ExecuteGenericParsers(HydraRingInitializationService hydraRingInitializationService, int sectionId) { lastErrorFileParser.Parse(hydraRingInitializationService.TemporaryWorkingDirectory, sectionId); LastErrorFileContent = lastErrorFileParser.ErrorFileContent; try { illustrationPointsParser.Parse(hydraRingInitializationService.TemporaryWorkingDirectory, sectionId); IllustrationPointsResult = illustrationPointsParser.Output; } catch (HydraRingFileParserException e) { IllustrationPointsParserErrorMessage = e.Message; IllustrationPointsResult = null; } }
public void ParameteredConstructor_ExpectedValues() { // Setup var settings = new HydraRingCalculationSettings("D:\\hlcd\\hlcdFilePath", "D:\\preprocessor", false); // Call var hydraRingInitializationService = new HydraRingInitializationService(HydraRingFailureMechanismType.AssessmentLevel, 700001, "D:\\work", settings); // Assert Assert.AreEqual("D:\\work\\700001.ini", hydraRingInitializationService.IniFilePath); Assert.AreEqual("D:\\work\\700001.sql", hydraRingInitializationService.DatabaseCreationScriptFilePath); Assert.AreEqual(Path.Combine(hydraRingDirectory, "MechanismComputation.exe"), hydraRingInitializationService.MechanismComputationExeFilePath); Assert.AreEqual("D:\\work", hydraRingInitializationService.TemporaryWorkingDirectory); }
/// <summary> /// Performs the actual calculation by running the Hydra-Ring executable. /// </summary> /// <param name="uncertaintiesType">The uncertainty type used in the calculation.</param> /// <param name="hydraRingCalculationInput">The object containing input data.</param> /// <exception cref="HydraRingCalculationException">Thrown when an error occurs while performing the calculation.</exception> /// <exception cref="InvalidOperationException">Thrown when preprocessor directory is required but not specified.</exception> protected void Calculate(HydraRingUncertaintiesType uncertaintiesType, HydraRingCalculationInput hydraRingCalculationInput) { try { if (string.IsNullOrEmpty(calculationSettings.PreprocessorDirectory) && hydraRingCalculationInput.PreprocessorSetting.RunPreprocessor) { throw new InvalidOperationException("Preprocessor directory required but not specified."); } int sectionId = hydraRingCalculationInput.Section.SectionId; OutputDirectory = CreateWorkingDirectory(); var hydraRingConfigurationService = new HydraRingConfigurationService(uncertaintiesType); hydraRingConfigurationService.AddHydraRingCalculationInput(hydraRingCalculationInput); var hydraRingInitializationService = new HydraRingInitializationService( hydraRingCalculationInput.FailureMechanismType, sectionId, OutputDirectory, calculationSettings); hydraRingInitializationService.WriteInitializationScript(); hydraRingConfigurationService.WriteDatabaseCreationScript(hydraRingInitializationService.DatabaseCreationScriptFilePath); PerformCalculation(OutputDirectory, hydraRingInitializationService); ExecuteGenericParsers(hydraRingInitializationService, sectionId); ExecuteCustomParsers(hydraRingInitializationService.TemporaryWorkingDirectory, sectionId); } catch (HydraRingFileParserException e) { throw new HydraRingCalculationException(e.Message, e.InnerException); } catch (Exception e) when(IsSupportedCalculatedException(e)) { throw new HydraRingCalculationException(string.Format(Resources.HydraRingCalculatorBase_Calculate_Critical_error_during_calculation_Exception_0, e.Message), e.InnerException); } }