-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathSimpleStatistics.cs
101 lines (86 loc) · 4.11 KB
/
SimpleStatistics.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
using DHI.Mike1D.Generic;
using DHI.Mike1D.Mike1DDataAccess;
using DHI.Mike1D.Plugins;
using DHI.Mike1D.ResultDataAccess;
namespace Scripts
{
/// <summary>
/// Enables simple statistics and accumulated time series calculations.
/// </summary>
public class SimpleStatistics
{
private ResultSpecification _resultSpec;
private Mike1DData _mike1DData;
/// <summary>
/// Method called when Mike1DData object has been loaded.
/// </summary>
[Script]
public void Initialize(Mike1DData mike1DData)
{
_mike1DData = mike1DData;
AddAccumulatedTimeSeries();
AddStatistics();
}
private void AddAccumulatedTimeSeries()
{
// Find HD result specification
_resultSpec = _mike1DData.ResultSpecifications.Find(x => x.ID == "DefaultHDResults");
// Accumulated values of discharge
AddQuantity(DerivedQuantity.Create(PredefinedQuantity.Discharge, DerivedQuantityType.TimeIntegrate));
AddQuantity(DerivedQuantity.Create(PredefinedQuantity.Discharge, DerivedQuantityType.TimeIntegratePositive));
AddQuantity(DerivedQuantity.Create(PredefinedQuantity.Discharge, DerivedQuantityType.TimeIntegrateNegative));
}
private void AddStatistics()
{
// Add simple statistics for default HD results
_resultSpec = _mike1DData.ResultSpecifications.Find(x => x.ID == "DefaultHDResults");
_resultSpec = CreateStatisticsResultSpecification(_resultSpec, ResultTypes.HD);
_mike1DData.ResultSpecifications.Add(_resultSpec);
// Water level
AddQuantity(DerivedQuantity.Create(PredefinedQuantity.WaterLevel, DerivedQuantityType.Max));
AddQuantity(DerivedQuantity.Create(PredefinedQuantity.WaterLevel, DerivedQuantityType.MaxTime));
AddQuantity(DerivedQuantity.Create(PredefinedQuantity.WaterLevel, DerivedQuantityType.MinTime));
AddQuantity(DerivedQuantity.Create(PredefinedQuantity.WaterLevel, DerivedQuantityType.Min));
AddQuantity(DerivedQuantity.Create(PredefinedQuantity.WaterLevel, DerivedQuantityType.Average));
// Discharge
AddQuantity(DerivedQuantity.Create(PredefinedQuantity.Discharge, DerivedQuantityType.TimeIntegrate));
AddQuantity(DerivedQuantity.Create(PredefinedQuantity.Discharge, DerivedQuantityType.Max));
AddQuantity(DerivedQuantity.Create(PredefinedQuantity.Discharge, DerivedQuantityType.MaxTime));
AddQuantity(DerivedQuantity.Create(PredefinedQuantity.Discharge, DerivedQuantityType.MinTime));
AddQuantity(DerivedQuantity.Create(PredefinedQuantity.Discharge, DerivedQuantityType.Min));
AddQuantity(DerivedQuantity.Create(PredefinedQuantity.Discharge, DerivedQuantityType.Average));
// Flow velocity
AddQuantity(DerivedQuantity.Create(PredefinedQuantity.FlowVelocity, DerivedQuantityType.Max));
AddQuantity(DerivedQuantity.Create(PredefinedQuantity.FlowVelocity, DerivedQuantityType.MaxTime));
AddQuantity(DerivedQuantity.Create(PredefinedQuantity.FlowVelocity, DerivedQuantityType.MinTime));
AddQuantity(DerivedQuantity.Create(PredefinedQuantity.FlowVelocity, DerivedQuantityType.Min));
AddQuantity(DerivedQuantity.Create(PredefinedQuantity.FlowVelocity, DerivedQuantityType.Average));
}
private ResultSpecification CreateStatisticsResultSpecification(ResultSpecification resultSpec, ResultTypes resultType)
{
var fileName = resultSpec.Connection.FilePath.Path.Replace(".res1d", "Stat.res1d");
var conn = new Connection
{
BridgeName = "res1d",
FilePath = {Path = fileName}
};
var statisticsResultSpec = new ResultSpecification
{
ID = "HDStatistics",
StoringFrequency = 1,
StoringFrequencyType = StoringFrequencyUnitTypes.PerTimeStep,
Connection = conn,
Mode = ResultSpecification.FileMode.Overwrite,
ResultType = resultType,
StartTime = _mike1DData.SimulationEnd,
EndTime = _mike1DData.SimulationEnd
};
return statisticsResultSpec;
}
private void AddQuantity(IQuantity quantity)
{
_resultSpec.What.Add(quantity);
_mike1DData.HDParameters.AdditionalOutput.Quantities.Add(quantity);
}
}
}