The changes in this beta will be available in the next Source production release due out at the end of June 2022.
This release includes:
- Additional functions for Data Sources and Probability Of Exceedance,
- improvements to constraints downstream of Storage nodes,
- Backwards Euler Release Method is now available for Weirs, and
- changes for Plugin developers.
Functions for Data Sources and Probability Of Exceedance
There are four new built-in Functions:
- GetDataPeriod - Gets data from a Data Source between the start and end dates. Data is returned as an array.
- GetDataTimeSteps - Gets data from a Data Source using a start date and the number of time steps. Data is returned as an array.
- ProbabilityOfExceedanceFlow - Gets the percentage value for the given flow from the probability of exceedance curve.
- ProbabilityOfExceedancePercentage - Gets the flow value for the given percentage from the probability of exceedance curve.
Example usage:
//Data Sources functions //Arguements are: Data Source (for files, Name.ColumnName), start year, start month, start day, end year, end month, end day GetDataPeriod("MyDataSource_csv.Column1", 2000, 1, 1, 2020, 12, 31) //Returns an array of values in the units of MyDataSource_csv.Column1. //Arguements are: Data Source (For files, name and column name), start year, start month, start day, number of time steps GetDataTimeSteps("MyDataSource_csv.Column1", 2000, 1, 1, 365) //Returns an array of values in the units of MyDataSource_csv.Column1. //These methods can then be used with other built in functions that take an array such as sum, median, average, min, max etc. e.g: sum(GetDataTimeSteps("MyDataSource_csv.Column1", 2000, 1, 1, 365)) //Probability Of Exceedance //Arguements are: Array of values, flow value (in the units of Flow_res_csv.Runoff) ProbabilityOfExceedanceFlow(GetDataTimeSteps("Flow_res_csv.Runoff", 2000, 1, 1, 365),10) //Returns the percentage value. //Arguements are: Array of values, percentage ProbabilityOfExceedancePercentage(GetDataTimeSteps("Flow_res_csv.Runoff", 2000, 1, 1, 365),20) //Returns the flow value in the units of Flow_res_csv.Runoff. //You can also use a modelled variable to provide the array of values ProbabilityOfExceedanceFlow($Previous30DaysFlow,10)
Backwards Euler Release Method now available For Weirs
Backward Euler Method is now available for Weirs! This wasn't a small development and requires testing from the jurisdictions.
It's enabled under Edit \ Scenario options \ Storages:
Storages have had the option of using the Backward Euler Method for a while now and it's the default for new models. However, the Piecewise-linear Integral Method is still available, see Storage Node - SRG for details.
Moving the Weir over to the Backward Euler Method enables other features:
- Outlet Priorities can now be used,
- Weirs now include the concepts of a Safe Release capacity for Operating Constraints, and
- Ordering Priorities will now work with Weirs.
Improvements to Minimum Constraints downstream of Storages
For Rules-based ordering, we have improved the Constraint calculations downstream of Storages. This is how the Constraint Phase in Storages was previously calculated:
- The Storage Node Model calculates a Predicted Volume for the storage. This is done by taking the Current Storage Volume and adding the Ordering Minimum Constraint from upstream.
- It uses this to determine a Minimum Release and a Maximum Release for each of the Outlet Paths, by comparing the Predicted Volume against the Outlet definitions (e.g. spillways, valves, etc)
- There is a special case if the Predicted Volume exceeds the Full Supply Volume
- In this case, the Minimum Release is the Predicted Volume - Dead Storage Volume - Full Supply Volume (which looks wrong: RM-17722)
- The Minimum Release and a Maximum Release would become the Ordering Minimum Constraint and an Ordering Maximum Constraint for downstream.
We have now added a Volume Above Maximum Operating Constraints
- Volume Above Maximum Operating Constraints = Predicted Volume - Maximum Operating Constraint
- Then it is constrained so New Minimum Release = MIN( Maximum Release, MAX( Minimum Release, Volume Above Maximum Operating Constraints ) )
So that New Minimum Release becomes the Ordering Minimum Constraint.
Plugin Developers
The API for Custom functions has been extended:
- You can now include strings and arrays as arguments for custom functions.
- You can now return an array from a custom function, rather than just a single double value.
This was implemented to enable the function improvements listed above, however can now be used in any custom function. For details please see: Extensions to Custom Functions in 5.13beta
As we are moving to .net 6, we have now updated the .csproj format that is used by Source. Please see: Csproj Format to go through the conversion process.
To compile Source you now require:
- .Net Framework 4.8 Developer pack - https://dotnet.microsoft.com/en-us/download/dotnet-framework/thank-you/net48-developer-pack-offline-installer
- .NET 5.0 SDK - https://dotnet.microsoft.com/en-us/download/dotnet/5.0
- Visual Studio 2019 - https://visualstudio.microsoft.com/vs/older-downloads/
Regression Testing
There is no tolerance in our regression test suite to allow for earlier identification of results being different on different machines or versions of operating systems.
Details here: /wiki/spaces/SC/pages/51649764
Insight
To run Insight, you also need to install the 32bit version of Microsoft Visual C++ 2010 Redistributable Package.
This installer is for 32bit machines and 64bit machines since the library we use is 32bit: Microsoft Visual C++ 2010 Redistributable Package (x86).
Full Release Documentation