See also: OATC Wiki Home
Date: April 21.4 - 23.4, 2009
Venue:DHI, Hørsholm, Agern Allé 5, Denmark
Rob Knapen, Alterra, Wageningen UR (Rob.Knapen@wur.nl)
Standa Vanecek, DHI (s.vanecek@dhi.cz)
Adrian Harper, Wallingford Software (adrian.harper@wallingfordsoftware.com)
Stef Hummel, Deltares (stef.hummel@deltares.nl)
Unknown User (don), Deltares (gennadii.donchyts@deltares.nl)
Jesper Grooss, DHI (jgr@dhigroup.com)
Apologies:
Peter Schade, BAW (peter.schade@baw.de)
Andrea Antonello (andrea.antonello@hydrologis.eu)
Jan Gregersen, LicTek (gregersen@lictek.dk)
Unknown User (onnoroos), Alterra (Onno.Roosenschoon@wur.nl)
Unknown User (jnh@dhigroup.com) Johan Hartnack , DHI (jnh@dhigroup.com)
http://www.openmi.org/
http://sourceforge.net/projects/openmi
wiki.openmi.org
To be done by: Gena
Will be finished by: april 27 th
To be done by: Stef and/or Rob B.
Will be finished by: may 8 th
To be done by: Stef and/or Rob B.
Will be finished by: may 8 th
To be done by: Stef and/or Rob B.
Will be finished by: may 15 th
To be done by: Adrian
Will be finished by: try before the next meeting (june 8 th).
To be done by: Adrian
Will be finished by: try before the next meeting (june 8 th).
To be done by: Stef and Jesper
Will be finished by: try before the next meeting (june 8 th).
Schedule:
This led to some remarks, of which a few were "java only", but some of them reflected on the Standard in general. Items to be addressed at the next meeting:
OpenMIException : Exception
. However, first we will have a detailed look at the guidelines for introducing custom exceptions in both .Net and Java. Rob K. has added a page for this, Guidelines for introducing custom exceptions. It now includes Java suggestions, Gena will add .Net suggestions.If component has Invalid status and we call Validate() - it may even call Update() on another components in order to validate itself.
The Limitations of time representation was discussed as part of the time issue, see 3.6.2.
Stef: The question is confusing, the actual issue is that we should distinguish between IsAvailable and IsValid.
We are now realized that there is a difference between IsAvailable (only for output item, means it is for consumers) IsValid (probably for IExchangeItem, meaning if item is valid in the context of current component, maybe updated during Validate() call)?
: Discuss component operation mode hereWhen discussing get/set, the subject of the discussion graduallly moved to the pull versus loop driven approach. This led to an important decision : We will introduce a boolean argument that indicates whether the component should run in a pull mode (like in OpenMI 1.4) or in loop mode
We will leave AddConsumer/RemoveConsumer for now. The BindingList mechanism has been implemented, though, so anyone can use it
... double GetVertexMCoordinate(int elementIndex, int vertexIndex); ... // proposal: // the four methods could be replaced with this: public enum SpatialDimension { X, Y, Z, M } public double getVertexCoordinate(int elementIndex, int vertexIndex, SpatialDimension dim); |
IIdentifiable
and IDescribable
. Some interfaces already have been derived from IIdentifiable
and/or IDescribable
** At some stage, we should check all interfaces on whether to derive from IIdentifiable
and/or IDescribable
or not.
IIdentifiable
and/or IDescribable
are not used as seperate entities.namespace OpenMI.Standard { public enum EArgType { String = 0, // default Bool, Int, Double, Path, // presummed to exist and accessable FilePath, // presummed to exist and accessable PathNew, FilePathNew, XML, // Rob: can be used together with a schema for complex argument data MIME, // Rob: might be useful to pass in images, or text documents, etc. } /// <summary> /// The IArgument interface defines a key - value pair. If the property ReadOnly is /// false the value is editable otherwise it is read-only. /// </summary> public interface IArgument : IDescribable { /// <summary> /// Type that string value represents and can be converted to /// </summary> EArgType ValueType { get; } /// <summary> /// The key (string) in key-value pair. /// </summary> string Key {get;} /// <summary> /// <para>The value (double) in key-value pair.</para> /// /// <para>If the ReadOnly property is true and the property is attempted to be changed /// from outside an exception must be thrown.</para> /// </summary> string Value { get; set; } /// <summary> /// Defines whether the Values property may be edited from outside. /// </summary> bool ReadOnly {get;} } } |
After some discussions, their were four proposals. See list below (including the original 1.4 situation).
Note: naming to be done yet.
public interface ITime { double StampAsModifiedJulianDay { get; } double DurationAsModifiedJulianDay { get; } } public interface ITimeSet { List<ITime> Times { get; } bool HasDurations { get; } } |
public interface ITime { double StampAsModifiedJulianDay { get; } } public interface ITimeSpan : ITime { double DurationAsModifiedJulianDay { get; } } public interface ITimeSet { List<ITime> Times { get; } bool HasDurations { get; } } |
public interface ITimeSet { IList<double> TimeStamps { get; set; } IList<double> Durations { get; set; } TimeZoneInfo TimeZone { get; set; } bool HasDurations { get; } } |
public interface ITimeSet { IList<double> TimeStamps { get; } TimeZoneInfo TimeZone { get; } } public interface ITimeSpanSet : ITimeSet { IList<double> Durations { get; } } |
public interface ITime { } public interface ITimeStamp : ITime { double ModifiedJulianDay {get;} } public interface ITimeSpan : ITime { ITimeStamp Start { get; } ITimeStamp End { get; } } |
After studying the proposal, we have made a decision . We will take version I.
Adrian suggested that we incorporate as less platform specific things in the Standard as possible. This also holds for Lists and events. We will be put the issue on the agenda for next meeting.
After some detailed discussion on the .Net.DateTime/Java.Date versus the MJD implementation, we have reached a conclusion : We will keep using the Modified Julian Day.
We should take into consideration whether we want to support a c++ version of the standard in the future.
The decorators were discussed thouroughly, and we came up with some extensions to the standard.
See list of questions discussed on the following page: Exchange item decorators.
Current changes to the standard:
// add a new interface: public interface IExchangeItemDecoratorFactory { IIdentifiable[] GetAvailableOutputDecorators(IOutputItem decoratedItem, IInputItem targetItem); IOutputItemDecorator CreateOutputItemDecorator(IIdentifiable decoratorId, IOutputItem decoratedItem, IInputItem targetItem); IDescribable GetDecoratorDescription(IIdentifiable id); } // add the following methods to the ILinkableComponent: public interface ILinkableComponent { ... IExchangeItemDecoratorFactory GetDecoratorFactory(); void AddOutputItemDecorator(IOutputItemDecorator decorator); void RemoveOutputItemDecorator(IOutputItemDecorator decorator); } |
We will keep track of a wish list for version 3.0.
Gena will move the content of the current wiki to the new wiki, and make a redirect page to the new wiki on the current one, and will ask the Greek to adjust the name server to let it refer to the new new wiki.
Peter Schade achieved quite a bit of result, making nearly everything working. During a Skype session Peter explained the status to the other OATC members, who were quite impressed.
The Linux version has been commited to SourceForge:http://openmi.svn.sourceforge.net/svnroot/openmi/branches/OpenMI-Version-1-Trunk/
https://public.deltares.nl/display/OPENMI/How+to+port+the+OpenMI+from+Windows+to+Linux
How to port the OpenMI environment from Linux to Windows:
A set of Mono dlls and exe files was generated and tested on openSUSE 11.0 Linux. Interested persons are invited to test the set, especially the ConfigurationEditor on further (Linux) platforms supported by Mono.
https://public.deltares.nl/display/OPENMI/How+to+generate+a+LinkableComponent+with+a+Fortran+engine+on+Linux
How to generate a LC (Fortran 90 engine and C# wrapper) on Linux
Deltares will test the Linux version on Ubuntu and Fedora in about 3 weeks from now (say May 15 th ).
Results will be reported at next meeting, after which Adrian will take care of the distribution.
All tasks are handled by sourceForge. GOTO: OpenMI Tasks on source forge