/// <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); } }
/// <summary> /// Creates a new instance of the <see cref="HydraRingConfigurationService"/> class. /// </summary> /// <param name="uncertaintiesType">The <see cref="HydraRingUncertaintiesType"/> to use while performing Hydra-Ring calculations.</param> public HydraRingConfigurationService(HydraRingUncertaintiesType uncertaintiesType) { UncertaintiesType = uncertaintiesType; }