Feature requests
| OpenMI Feature requests (Updated January 31st 2007) | ||||
| ID | Request | OpenMI Association Technical Committee evaluation |
||
| 1 | Latest Overlapping Date/Time By: wmdaniels (wmdaniels) - 2006-12-05 11:17 https://sourceforge.net/forum/forum.php?thread_id=1625591&forum_id=481283\\ In the GUI, the models run to the latest overlapping date/time. If this date is, say, the 7th January 2000, then the models will not actually reach the 7th January, they run to the timestep just before 7th January. I think it would be more logical for the models to run to, and including, the end time. What does anyone else think? |
Accepted [A], Rejected [R] or Considered [C] for implementation in version: OpenMI .Net 1.3 [ A ] OpenMI Java 1.3 [ ] OpenMI .Net 2.0 [ ] OpenMI Java 2.0 [ ] Comments: The may be a bug in the Utilities.Wrapper implementation. Could also be something that relates to how GetInputTime is implemented for the individual model. We will construct unit tests in Utilities.Wrapper.Test that demonstrates this behavior, the fix the problem and make sure that the new tests behaves as expected. (should be implemented in OpenMI version1.3). Task: Stef Hummel. Stef will check it this also has implications for the Java version also. Implementation status: Implementation expected to be completed by January 22 2007. |
||
| 2 | Add symbols to DimensionBase By: Rob Knapen (rknapen) - 2006-12-05 10:27 http://sourceforge.net/forum/forum.php?thread_id=1625571&forum_id=481283\\ To represent dimensions as text it would convenient to add the symbols to the DimensionBase enumeration. |
Accepted [A], Rejected [R] or Considered [C] for implementation in version: OpenMI .Net 1.3 [R ] OpenMI Java 1.3 [R ] OpenMI .Net 2.0 [ C ] OpenMI Java 2.0 [C ] Comments: Such implementation can easily be done by anyone that e.g. wants such feature in a user interface. All information is already available. We see little need for this and do not want to complicate the official OpenMI implementations with this. However, when the overall architecture for version 2 is in place we will add a few things that belong to the nice to have category, such as this issue. Implementation status: |
||
| 3 | IGridElementSet By: Rob Knapen (rknapen) - 2006-12-05 10:23 http://sourceforge.net/forum/forum.php?thread_id=1625570&forum_id=481283\\ In some domains where we want to use OpenMI it is very common to work with grid based (spatial) data. It is rather awkward to represent this in the current available ElementSet. In general the information that the data represents a grid is lost and there is no way to optimize processing anymore. Preferably ElementTypes for grid cells are added together with methods for handling grid data. This could be done in a IGridElementSet interface that inherits from IElementSet. |
Accepted [A], Rejected [R] or Considered [C] for implementation in version: OpenMI .Net 1.3 [ ] OpenMI Java 1.3 [ ] OpenMI .Net 2.0 [ ] OpenMI Java 2.0 [ ] Comments: We do not like to add specific subtypes of the elementset to the OpenMI standard or implementation. However, anyone are allowed to make his own implementation of the IElementSet and when this is used in e.g. a user interface to check if a ElementSet is of this type and then utilize the specific features of this implementation. Implementation status: |
||
| 4 | LinkableComponentGroup By: Rob Knapen (rknapen) - 2006-12-05 01:18 http://sourceforge.net/forum/forum.php?thread_id=1625564&forum_id=481283\\ To group linkable components introduce a LinkableComponentGroup class (in the backbone). This class implements the ILinkableComponent interface, but internally can contain a number of ILinkableComponents and ILinks. Further nesting is possible. A Composition then can be implemented as a specific form of a LinkableComponentGroup. Groups are handy to re-use (parts) of compositions and for user interface representation. The Java org.openmi.alterra.configuration package contains an implementation of this. |
Accepted [A], Rejected [R] or Considered [C] for implementation in version: OpenMI .Net 1.3 [ C ] OpenMI Java 1.3 [C ] OpenMI .Net 2.0 [ C ] OpenMI Java 2.0 [ C ] Comments: Considered for implementation in the OpenMI.Tools.GUI package. This does not require changes to the standard. We think this a useful utility and if someone needs it will support such implementation. One way this could work is that the GUI when saving the xml configuration file also saves a corresponding omi file. The such configuration can be loaded into another configuration by selecting this omi file. Implementation status: |
||
| 5 | Persist Argument in String By: Rob Knapen (rknapen) - 2006-12-05 01:12 http://sourceforge.net/forum/forum.php?thread_id=1625561&forum_id=481283\\ For persistency a specification should be added for representing the state of an Argument in a string, and to restore it from a string. For example it can be: a key-value list with "=" as separator between key and value, and ";" to separate the pairs. Together with a list of standard key names. |
Accepted [A], Rejected [R] or Considered [C] for implementation in version: OpenMI .Net 1.3 [R] OpenMI Java 1.3 [R ] OpenMI .Net 2.0 [R] OpenMI Java 2.0 [R] Comments: The current .net implementation of the configuration user interface (OmiED) can not support such changes because the method Iinitialize is invokes immediately when a model is added to the configuration. However, this could be changed. Then the user interface could load the LinkableComponnents and show these on the canvas without invoking the initialize. After that the user may be allowed to change the arguments and finally the GUI will invokes the Initialize methods. With respect to making the arguments persistent we think that this should be handled be the user interface and such information should be saved in the corresponding configuration file (e.g. opr file) Implementation status: |
||
| 6 | Add properties to the Argument By: Rob Knapen (rknapen) - 2006-12-05 01:08 http://sourceforge.net/forum/forum.php?thread_id=1625557&forum_id=481283\\ The Argument class should be extended with some additional properties (required, possible values, argument type) to allow for automatic processing and constructing (input) GUI widgets for them. Currently the contents of an argument is to unstructured to do this. |
Accepted [A], Rejected [R] or Considered [C] for implementation in version: OpenMI .Net 1.3 [R] OpenMI Java 1.3 [R] OpenMI .Net 2.0 [C] OpenMI Java 2.0 [C] Comments: We think this can be handle be making your own interface which inherits the IArgument interface. Your user interface can then check if an argument implement such interface and utilize the additional features / methods of this interface. However, for OpenMI version two we may make some improvements such as proposed here. Implementation status: |
||
| 7 | Add method to retrieve init arguments By: Rob Knapen (rknapen) - 2006-12-05 01:06 http://sourceforge.net/forum/forum.php?thread_id=1625556&forum_id=481283\\ A method added to the LinkableComponent to request the list of initialization arguments (e.g. getInitialisationArguments()) would be convenient. Currently there is no way for an application to find out what arguments a component needs. It can only be provided by documentation, or by an additional (non OpenMI) interface. |
Accepted [A], Rejected [R] or Considered [C] for implementation in version: OpenMI .Net 1.3 [R] OpenMI Java 1.3 [R ] OpenMI .Net 2.0 [C] OpenMI Java 2.0 [C] Comments: See comment from request 5. Implementation status: |
||
| 8 | Add support for qualitative information By: Rob Knapen (rknapen) - 2006-12-05 00:51 http://sourceforge.net/forum/forum.php?thread_id=1625550&forum_id=481283\\ To be able to use OpenMI in other domains there is a large request to support qualitative data (besides the current quantitative data). To implement this a parent interface (IDataType) could be introduced, which specifies into the IQuantity and IQuality interfaces. I have a Java sample implementation of this, for those interested. If possible it should be included into the (next) specification. |
Accepted [A], Rejected [R] or Considered [C] for implementation in version: OpenMI .Net 1.3 [R] OpenMI Java 1.3 [R ] OpenMI .Net 2.0 [A] OpenMI Java 2.0 [A] Comments: We think that this is necessary. We will continue the discussions of how specifically to define this in the OpenMI standard. Implementation status: |
||
| 9 | To display an image on the model By: wmdaniels (wmdaniels) - 2005-09-07 07:20 http://sourceforge.net/forum/forum.php?thread_id=1347872&forum_id=481283\\ Jeremy from WRc requested that an image be displayed on the models when they load up in the GUI to make them more identifiable. |
Accepted [A], Rejected [R] or Considered [C] for implementation in version: OpenMI .Net 1.3 [R ] OpenMI Java 1.3 [R ] OpenMI .Net 2.0 [ R ] OpenMI Java 2.0 [R ] Comments: These should be no changes to the standard. Anyone can make user interfaces that features import of images to symbolize the individual linkablecomponent. Implementation status: |
||
| 10 | Copy Paste functionality for the DataMonitor By: wmdaniels (wmdaniels) - 2006-11-30 03:14 http://sourceforge.net/forum/forum.php?thread_id=1622968&forum_id=481283\\ There is no copy and paste functionality in the datamonitor at the moment. It would be useful for copying the data from the DataMonitor and pasting it into Excel for data analysis |
Accepted [A], Rejected [R] or Considered [C] for implementation in version: OpenMI .Net 1.3 [ A ] OpenMI Java 1.3 [ ] OpenMI .Net 2.0 [ ] OpenMI Java 2.0 [ ] Comments: RIZA has developed at data monitor that data exchange with Excel. Flip will upload this to source forge. (the version 1.3 branch) Implementation status: |
||
| 11 | Latest Overlapping Date/Time Control in GUI By: wmdaniels (wmdaniels) - 2006-12-01 07:19 http://sourceforge.net/forum/forum.php?thread_id=1623983&forum_id=481283\\ Please may I request that the latest overlapping time control in the GUI show the date/time format depending on the user-culture, for instance, in the UK we use dd/mm/yyyy but in the US they use mm/dd/yyyy. At the moment the GUI always shows the date/time the US way which can be a bit confusing for us! |
Accepted [A], Rejected [R] or Considered [C] for implementation in version: OpenMI .Net 1.3 [A] OpenMI Java 1.3 [A] OpenMI .Net 2.0 [A] OpenMI Java 2.0 [A ] Comments: Yes, Wiki will implement this change Implementation status: |
||
| 12 | Include the DataMonitor in the installation By: wmdaniels (wmdaniels) - 2006-11-30 03:11 http://sourceforge.net/forum/forum.php?thread_id=1622965&forum_id=481283\\ Can the datamonitor be part of the standard install - at the moment you could get hold of it by doing a build of the source code but this is not really practical for non-programmers. Two files would need to be installed - org.OpenMI.Tools.DataMonitor.dll and datamonitor.omi |
Accepted [A], Rejected [R] or Considered [C] for implementation in version: OpenMI .Net 1.3 [ A] OpenMI Java 1.3 [A ] OpenMI .Net 2.0 [ A] OpenMI Java 2.0 [A ] Comments: Jan will make sure that the data monitor is included in the installation for the next release. Implementation status: |
||
| 13 | Possibilities of hardware environment By: Ronse Yves (ronse_yves) - 2006-11-27 05:13 http://sourceforge.net/forum/forum.php?thread_id=1620711&forum_id=462113\\ Dear members of the OpenMI Association |
Accepted [A], Rejected [R] or Considered [C] for implementation in version: OpenMI .Net 1.3 [ ] OpenMI Java 1.3 [ ] OpenMI .Net 2.0 [ ] OpenMI Java 2.0 [ ] Comments: Such implementations are tasks for the model providers. However, we will provide a description for how to do such implementations (design pattern and description). Stef will make a firs draft and Jan will complete it. Implementation status: |
||
| 14 | Links should be owned by the delivering linkable component By Rob Brinkman Importance: high Impact: high Target: org.OpenMI.Standard Beneficial to: trainers, SmartWrapper and any developer who wants to overrule the link implementation, connection managers (e.g. distribution connector and ensemble manager) As a result of the interface approach, there is freedom to choose which class implements the interface. A linkable component can choose the class which is most appropriate for implementing the required functionality. For example, classes which implement the IQuantity, IElementSet, IExchangeItem and IValueSet are the responsibility of the linkable component. In Delft we use several classes which implement IElementSet. There is one exception to this methodology, being the ILink. In practice the link is created by a surrounding application (OmiEd.exe), which cannot do something else than creating a default link, being the backbone implementation. However, we have experienced that we would like to add additional functionality to the link (Actually, the smart wrapper had the same problem and therefore introduced the smart link; the smart wrapper would have been simpler if it could have defined its own links) To accomplish this, we propose the following: 1. When a link is needed, ask the delivering component 2. Regard the link as property of the delivering component. Note that all knowledge is implemented still by the delivering linkable component (actually a port or socket would be a better name, but for historical reasons we should keep the name link) If we regard the link as a socket or port for data, a logical consequence is that we ask the link for data. In other words, we move the GetValues call from the linkable component to the link. Also for this reason the need for a target component and a source component is gone. This results in the following changes in the interfaces. The quantity and element set in the link are the quantity and element set of the accepting component. publicinterface IlinkableComponent Unknown macro: {\ IValueSetGetValues(ITimetime, stringlinkID);ILinkGetLink( IQuantity quantity,\ IElementSet elementSet, IDataOperation[] dataOperations);\ }
Unknown macro: {\ ILinkableComponentSourceComponent Unknown macro: {get;}
IValueSet GetValues(ITime time);\ } ILinkableComponentTargetComponent |
Accepted [A], Rejected [R] or Considered [C] for implementation in version: OpenMI .Net 1.3 [ ] OpenMI Java 1.3 [ ] OpenMI .Net 2.0 [ C ] OpenMI Java 2.0 [C ] Comments: Implementation status: |
||
| 15 | Caller doesn't have to be a linkable component By: Rob Brinkman Importance: medium Impact: medium Target: org.OpenMI.Standard Beneficial to: trainers, visualization tools, result saving tools, possibly connection managers Currently it is necessary that the caller of a linkable component is a linkable component itself. There is no functional need for this, because the callee should answer to the GetValues call, no matter who called it. It is also inconvenient to implement the complete ILinkableComponent as it is not used in reality by a variety of applications (especially visualization tools). In the previous issue we removed the source and target component from the link. This makes it easier to allow for callers which are not linkable components. However, there is some functionality which is invoked on the caller's side, being the earliest input time. This method has become unreachable, because we removed the target component from the link. As a linkable component doesn't know its caller, while the caller does know the link (from its internal administration), it seems logical to move this functionality to the link and change the calling logic. From now on the caller should set an appropriate value for the earliest needed time. Its implementation is now in the link, which is a better place because most often it will clear a buffer in the link. In principle a linkable component caller can be any kind of object. Custom applications can be built which create any kind of linking. Only in the case that a general user interface is used or that a general composition reader is used, we need to perform some actions on the caller. This involves management of links and supporting the user in making right choices (just like it is done now). Note that on composition level there is still a need for knowing the source and target of a link. Only then a generic application will be capable of instantiating a link based on an xml file. The xml file structure of a composition therefore will not change: To create a link it will invoke the GetLink method of the source linkable component and use the AddLink method in the caller to add the link to the target linkable component (Such an application will need its own administration of links, because otherwise it is not possible to find out which links have been established). public interface IlinkableComponentCaller { intInputExchangeItemCount {{color:blue}get;} IExchangeItemGetInputExchangeItem(int index); void AddLink (ILink link); void RemoveLink(string linkID); } publicinterface IlinkableComponent { intInputExchangeItemCount Unknown macro: {get;}
IInputExchangeItemGetInputExchangeItem(intindex); } Unknown macro: {get;}
IElementSetTargetElementSet IQuantitySourceQuantity Unknown macro: {get;}
IElementSetSourceElementSet IQuantity Quantity {{color:blue}get;} Unknown macro: {get;}
IOutputExchangeItemGetOutputExchangeItem(intindex); Unknown macro: {\ IValueSetGetConvertedValues (IValueSet source);\ }
} |
Accepted [A], Rejected [R] or Considered [C] for implementation in version: OpenMI .Net 1.3 [ ] OpenMI Java 1.3 [ ] OpenMI .Net 2.0 [C] OpenMI Java 2.0 [C] Comments: Implementation status: |
||
| 19 | Combined quantities and ValueSets By: Rob Brinkman Importance: high Impact: medium Target: org.OpenMI.Standard Beneficial to: data assimilation, water quality modelling, water allocation, vector fields Often there are quantities which are related closely to each other. For example, on a source the concentration of the added water amount is defined, but you can only use this value if you know the amount of water (discharge) too. They must be defined on the same element set and if you link to the concentration in this example, you must link to the discharge too. Although you can enforce this by validation, it would be convenient if you were able to link them in one go. This is convenient both for validation as for user interfaces. Another issue is the usage of the IValueSet. In practice most often a scalar set is used. But sometimes we use a vector set too and discover that a lot of already implemented software is not capable of handling this (for example the wrapper). A solution is to check what kind of value set is in focus and then perform an appropriate task (this is the way the ElementMapper works). If we define a new class implementing IValueSet, we have to do this again. In fact we want obtain the array of doubles on a high level. This array of doubles represent the actual values for further processing, either in a data operation for interpolation or in the computational core. These issues are combined, because the same improvement can be applied here. The closely related quantities are regarded as a combined quantity. A vector quantity can be seen as a combined quantity of three scalar quantities. In fact a quantity set is a quantity with several parts (X, Y, Z for vector quantities). This leads to the following changes: 1. A quantity contains several parts (a part is defined by a string) 2. The IValueSet contains an array of doubles (instead of the IScalarSet and IVectorSet) 3. The number of values in the IValueSet array is the number of elements in the element set times the number of components in the quantity and interfaces: public interface IQuantity Unknown macro: {\ ValueType ValueType
Unknown macro: {get;} \ string GetQuantityPart(int quantityPartIndex);\ IUnit GetUnit(int quantityPartIndex);\ }
Unknown macro: {\ int Count;\ int QuantityPartCount
Unknown macro: {get;} \ bool[] Valid
Unknown macro: {get;} \ double[] GetValues(int quantityPartIndex);\ double GetValue(int quantityPartIndex, int elementIndex);\ }
|
Accepted [A], Rejected [R] or Considered [C] for implementation in version: OpenMI .Net 1.3 [ ] OpenMI Java 1.3 [ ] OpenMI .Net 2.0 [C] OpenMI Java 2.0 [C] Comments: Implementation status: |
||
| 20 | Time series By: Rob Brinkman Importance: medium Impact: medium Target: org.OpenMI.Standard Beneficial to: data source components In some situations it is necessary to obtain time series from a delivering component. Typically such a component is an input file reader or a database component, but this is not necessarily the case. To obtain a time series at the moment, one should do a GetValues for each ITime in the time series. Although possible, one can imagine that this is an inconvenient and performance consuming task. It would be more convenient if it were possible to obtain the time series in one go. To do this, we can extend the IValueSet again (like we did for the combined quantities). The array of doubles retuned by the IValueSet contains values for all ITimes requested in the GetValues call. The parameter ITime in the GetValues call is replaced by ITime[] (the keyword params allows that on the calling side a single ITime is passed instead of an array, just like now; on the implementation side one should use the array of ITimes always). public interface Ilink Unknown macro: {\ IValueSet GetValues(params ITime[] time);\ }
|
Accepted [A], Rejected [R] or Considered [C] for implementation in version: OpenMI .Net 1.3 [ ] OpenMI Java 1.3 [ ] OpenMI .Net 2.0 [C] OpenMI Java 2.0 [C] Comments: Implementation status: |
||
| 21 | Hot starts By: Rob Brinkman Importance: high Impact: low Target: org.OpenMI.Standard Beneficial to: any restart of a model combination which needs time for stabilization, flood forecasting, filtering/data assimilation... Models need initial conditions to start with. As shown by the HarmoniLake case, inappropriate initial conditions can create stability problems which are difficult to overcome as models influence each other. A facility that allows a model combination to store its joint equilibrium state persistently and use it for other simulations (e.g. scenario runs) would drastically improve applicability. The current IManageState interface is very much oriented towards run-time state management e.g. for iteration purposes. It does not guarantee that a state is stored in a persistent way. Therefore a separate (additional) interface is suggested. This interface could be as follows: public interface IpersistentState Unknown macro: {\ bool SaveStateToDisk(string stateReference);\ bool LoadStateFromDisk (string stateReference);\ }
|
Accepted [A], Rejected [R] or Considered [C] for implementation in version: OpenMI .Net 1.3 [ ] OpenMI Java 1.3 [ ] OpenMI .Net 2.0 [C] OpenMI Java 2.0 [C] Comments: Implementation status: |
||
| 22 | Integers for the QuantityID and ElementSetID By: wmdaniels (wmdaniels) My specific suggestion is that SetValues and GetValues are made as efficient as possible as they are called many times. I would suggest using integers for the QuantityID and ElementSetID instead of strings. If any other functions are called many times then these should be looked at as well. |
Accepted [A], Rejected [R] or Considered [C] for implementation in version: OpenMI .Net 1.3 [ ] OpenMI Java 1.3 [ ] OpenMI .Net 2.0 [C] OpenMI Java 2.0 [C] Comments: Implementation status: |
||
| 23 | Equals methods in backbone By: Rob Brinkman Importance: medium Impact: low Target: org.OpenMI.Backbone Beneficial to: simultaneous access to same exchange items in various runs A lot of classes in the backbone implement the Equals method. They have been implemented in the right way as long as there is one run involved. We have a user interface where results of several runs can be compared. An essential part in this is retrieving the output exchange items and offering them to the user. But implementation has become difficult, because same quantity element set combinations from different linkable components are considered to be equal. Especially for the exchange item we would like the Equals method to be removed. |
ccepted [A], Rejected [R] or Considered [C] for implementation in version: OpenMI .Net 1.3 [ ] OpenMI Java 1.3 [ ] OpenMI .Net 2.0 [C] OpenMI Java 2.0 [C] Comments: Implementation status: |
||
| 24 | Backbone.Quantity constructor should use By: Peter Gijsbers Backbone.Quantity constructor should use IUnit Currently the constructor of the Quantity-object (org.OpenMI.Backbone) uses at the same time a Unit-clas and an IDimension-interface. The constructor should adopt the interfaces (and thus IUnit) instead of the classes. |
Accepted [A], Rejected [R] or Considered [C] for implementation in version: OpenMI .Net 1.3 [ ] OpenMI Java 1.3 [ ] OpenMI .Net 2.0 [C] OpenMI Java 2.0 [C] Comments: Implementation status: |