using System; using Deltares.Mathematics; using Deltares.Standard; // ======================================================================================================================= // Class name: // // Description: // // Copyright (c) 2008-2010 Deltares // // Date ID Modification // 2008-06-11 Best Created // 2010-04-20 Sel Implementation general StabilityCalculation class // 2010-05-12 Sel Implemented Genetic algorithm in Bishop and LiftVan // ======================================================================================================================= namespace Deltares.Stability.Calculation.Inner { public class TStartCalculation { // Private Fields public GeneticAlgorithm FGeneticAlgorithm; private TGetValuesDelegate FGetValuesDelegate = null; private TInterfaceData FInterfaceData = null; private ProgressDelegate FProgressDelegate = null; private TSendDebugInfoDelegate FSendDebugInfoDelegate = null; private TSetValuesDelegate FSetValuesDelegate = null; private TUserAbortDelegate FUserAbortDelegate = null; // ======================================================================================================================= // Date ID Modification // 2008-06-11 Best Created // ======================================================================================================================= //Constructor Create() public TStartCalculation() : base() {} // ======================================================================================================================= // Date ID Modification // 2008-06-11 Best Created // ======================================================================================================================= public TCalculationResult Calculate(TInterfaceData AInterfaceData, TDump ADumpdata) { TCalculationResult result; int i; DateTime LTime; TStabilityCalculation LCalculation; LevenbergMarquardtExtreme LLevenbergMarquardt; string lstr; int LNumberOfWaternets; // LTestUnit: TUnittestInterface; FInterfaceData = AInterfaceData; LNumberOfWaternets = 1; LCalculation = null; try { FInterfaceData.PrepareData(); //FInterfaceData.Writeinterfacedata(); if ((FInterfaceData.ModelData.IsProbabilistic)) { LNumberOfWaternets = FInterfaceData.Waternets.Length; } for (i = 1; i <= LNumberOfWaternets; i ++) { // Loop over waternets if probabilistic if ((FInterfaceData.ModelData.IsProbabilistic)) { FInterfaceData.CurrentWaternet = FInterfaceData.Waternets[i - 1]; FInterfaceData.PrepareSoilData(); } LCalculation = null; switch ((FInterfaceData.ModelData.CalcType)) { case TCalculationTypeSet.csBishop: case TCalculationTypeSet.csFellenius: LCalculation = new TBishopCalculation(); break; case TCalculationTypeSet.csLift: LCalculation = new TUpliftCalculation(); break; case TCalculationTypeSet.csLiftSpencer: LCalculation = new TUpliftCalculation(); break; case TCalculationTypeSet.csSpencer: LCalculation = new TSpencerCalculation(); break; case TCalculationTypeSet.csHorizontalBalance: // BishopProb: FCalculation := TBishopRandomField.Create; LCalculation = new THorizontalBalanceCalculation(); break; default: new NotImplementedException("No calculation algorithm implemented for option: " + FInterfaceData.ModelData.CalcType); break; } LCalculation.InterfaceData = FInterfaceData; LCalculation.CreateShortCuts(); LCalculation.DumpData = ADumpdata; LCalculation.DoProgress = FProgressDelegate; LCalculation.DoSetValues = FSetValuesDelegate; LCalculation.CreateZones(); if ((LCalculation != null)) { // Execute computation LTime = DateTime.Now; switch ((FInterfaceData.CalculationOptions.GeneticAlgorithm)) { case false: LCalculation.CalculationGrid(); break; case true: // Create the appropriate genetic algorithm FGeneticAlgorithm = new GeneticAlgorithm(); LLevenbergMarquardt = new LevenbergMarquardtExtreme(); FGeneticAlgorithm.GeneticAlgorithmOptions = FInterfaceData.GeneticAlgorithmOptions; FGeneticAlgorithm.DefineOptions(); FGeneticAlgorithm.DoProgress = FProgressDelegate; LCalculation.InvalidFitness = FGeneticAlgorithm.InvalidResult; LCalculation.CalculationGA(FGeneticAlgorithm); LCalculation.InvalidFitness = LLevenbergMarquardt.InvalidResult; LCalculation.CalculationLM(LLevenbergMarquardt); break; } } } // Write results to dumpfile if (((ADumpdata != null))) { if ((LNumberOfWaternets > 1)) { LCalculation.ProbCalculationIncludingExternalWaterlevels(); } ADumpdata.CalcMethod = FInterfaceData.ModelData.CalcType; ADumpdata.SubZones = FInterfaceData.ZoneData.IsDOVCalculation == false; } } catch (Exception E) { lstr = E.Message; throw E; } result = TCalculationResult.Succeeded; return result; } // ======================================================================================================================= // Date ID Modification // 2008-12-23 Manders Created // ======================================================================================================================= public TCalculationResult Validate() { TCalculationResult result; result = TCalculationResult.Succeeded; return result; } // ======================================================================================================================= // Date ID Modification // 2008-12-23 Manders Created // ======================================================================================================================= public TCalculationResult GetResults(ref string AResults) { TCalculationResult result; AResults = ""; result = TCalculationResult.Succeeded; return result; } // ======================================================================================================================= // Date ID Modification // 2008-12-24 Manders Created // ======================================================================================================================= public string Version() { string result; result = ""; return result; } // Public Methods // ======================================================================================================================= // Date ID Modification // 2008-12-24 Manders Created // ======================================================================================================================= public void SetUserAbortDelegate(TUserAbortDelegate AUserAbortDelegate) { FUserAbortDelegate = AUserAbortDelegate; } // ======================================================================================================================= // Date ID Modification // 2008-12-24 Manders Created // ======================================================================================================================= public void SetProgressDelegate(ProgressDelegate AProgressDelegate) { FProgressDelegate = AProgressDelegate; } // ======================================================================================================================= // Date ID Modification // 2008-12-24 Manders Created // ======================================================================================================================= public void SetSendDebugInfoDelegate(TSendDebugInfoDelegate ASendDebugInfoDelegate) { FSendDebugInfoDelegate = ASendDebugInfoDelegate; } // ======================================================================================================================= // Date ID Modification // 2008-12-24 Manders Created // ======================================================================================================================= public void SetGetValuesDelegate(TGetValuesDelegate AGetValuesDelegate) { FGetValuesDelegate = AGetValuesDelegate; } // ======================================================================================================================= // Date ID Modification // 2008-12-24 Manders Created // ======================================================================================================================= public void SetSetValuesDelegate(TSetValuesDelegate ASetValuesDelegate) { FSetValuesDelegate = ASetValuesDelegate; } } // end TStartCalculation public enum TCalculationResult { NoRun = -1, Succeeded = 0, NoInput = 1, NoLicense = 2, UserAbort = 3, InvalidInputStructure = 4, InvalidInputData = 5, RunFailed = 6, UnexpectedError = 7 } // end TCalculationResult public enum TValidationResultType { Debug, Info, Warning, Error } // end TValidationResultType public delegate void TMsgBoxDelegate(string AMsg); public delegate bool TUserAbortDelegate(); public delegate void TSendDebugInfoDelegate(string AID, object debugInfo); public delegate Object TGetValuesDelegate(Object AIdentification); public delegate void TSetValuesDelegate(Object AIdentification, Object AValues); }