You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 42 Next »

See also: OATC Wiki Home

Date: April 21.4 - 23.4, 2009
Venue:DHI, Hørsholm, Agern Allé 5, Denmark

Participants:

Rob Knapen, Alterra (Rob.Knapen@wur.nl): Arrive CPH 19:45 20/04, Depart CPH 14:35 23/04. Staying @ Axel Hotel Guldsmeden.
Standa Vanecek, DHI (s.vanecek@dhi.cz)
Adrian Harper, Wallingford Software (adrian.harper@wallingfordsoftware.com)
Stef Hummel, Deltares (stef.hummel@deltares.nl)
~don, Deltares (gennadii.donchyts@deltares.nl)
Jesper Grooss, DHI (jgr@dhigroup.com)

Apologies:
Peter Schade, BAW (peter.schade@baw.de)

Documents:

http://www.openmi.org/
http://sourceforge.net/projects/openmi
wiki.openmi.org

Table of contents

Minutes

1. Minutes from previous OATC meeting

2. Maintenance and support

3. OpenMI 2.0 Issues

h2 3.1 Road map to 2.0 alpha version

3.2 Pending Remarks on Standard as result of Java review

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:

  1. Question: what does isAvailable() mean in case of multiple consumers. Do all consumers need to have the same time(s)?
    1. Leave in for now, review after more implementation, one suggestion of modification bool isAvailable(whosAsking);
    2. (warning) Will be discussed later during the meeting, Stef will show an example of using isAvailable(whosAsking);
  2. Question: Collection or Set instead of List for (In|Out)putExchangeItems in LC?
    1. It will be ICollection (thumbs up).
  3. Question: Introduce IState instead of Object? This will emphasize the relation between IManageState and IPersistentState. Additional suggestion: IPersistentState extends IState.
    (b.t.w: makePersistent / readPersistentState are wrong names, should be something like getAsByteStream)
    1. Gena has discussed with Rob between last and current meeting. After some discussion the final result (thumbs up) is described on: Suggestion about changed to state management
  4. To be discussed: Introduce generics in IOutputItem.Values()? i.e. weakly typed via <T>
    1. (thumbs down) We will not introduce generics in the standard. However, they could be used in the SDK.
  5. Remark: Working with providers/consumers, we should take care that such a circularity might give garbage collection problems. After a short discussion, we see no real general way so solve this risk, so it has been decided that we should leave this up to the Garbage Collector.
    • Point noted, no specific agreement as to solution
  6. (thumbs up) We will introduce something like OpenMIException : Exception. However, first we will have a detailed look at the guidelines for introducing custom exceptions in both .Net and Java.

3.3 Suggestions for the states and possible transitions between the states of the ILinkableComponent

If component has Invalid status and we call Validate() - it may even call Update() on another components in order to validate itself.

3.4 Limitations of time representation in OpenMI (by W. de Winter (wim.dewinter@wur.nl))

Limitations of time representation

3.5 More suggestions on v2.0 changes

  • Move IsAvailable to IExchangeItem. Is it only for a thread-safety? If yes than see also ICollection.IsSynchronized

    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)?

  • Move Values { get; set; } to IExchangeItem?
    • (warning) get; set; to be reviewed at this meeting

      When discussing get/set, the subject of the discussion graduallly moved to the pull versus loop driven approach. This led to an important decision (thumbs up): 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

  • Add params keyword to IArguments[] args parameter in Initialize(IArgument[] args).

    •  Adrian review, if happy then ... (question)(thumbs up)
  • "string Validate()" / "bool IsValid(IExchangeItem item)" / "IsAvailable()", etc.
    • (warning) to be reviewed at this meeting
  • Add "params IOutputItem[] items" argument to Update() in order to specify explicitly what should be updated.

    • (warning) Maybe generalise to IExchangeItem i.e. allow IInputItem?
  • Remove AddConsumer/RemoveConsumer and use BindingList in the implementation instead to listen to IOutputItem.Consumer.Add() / Remove()

    We will leave AddConsumer/RemoveConsumer for now. The BindingList mechanism has been implemented, though, so anyone can use it

  • When we get loops in the compositions - we have to tell which component will be first! In the new GUI, we will let the user indicate the 'Start up component'.
     
  • Add Durations, TimeZone properties to ITimeSet? (see also changes from Rob in Java version)
  • Replace all ITime, ITimeStamp, ITimeSpan by: System.DateTime, System.TimeSpan. Should be straightforward. For components working in Julian only time in FORTRAN CalendarConverter can be used. But for .NET all nice features of the .NET date time, time span will be available, e.g. DateTime.AddDays(int), DateTime.AddHours(int), time1 > time2, time1.AddDays(1) > DateTime.Now, and so on.
    • (warning) all time issues will be discussed at this meeting
       
  • Change XYPoint+XYZPoint, ZYPolyline+XYZPolyline => Point, Polyline (make it look more like OGC entities)
    • Reviewed: OGC approach to see how we know when a Z coordinate exists:
      (thumbs up) IElementSet.SpatialReferenceWkt contains Z (vertical reference) and M systems, see http://en.wikipedia.org/wiki/Well-known_text.
    • To get the M-coordinate, a method should be added:
              ...
              double GetVertexMCoordinate(int elementIndex, int vertexIndex);
      
  • IIdentity has been split in IIdentifiable and IDescribable. Some interfaces already have been derived from IIdentifiable and/or IDescribable
    • (question) At some stage, we should check all interfaces on whether to derive from IIdentifiable and/or IDescribable or not.
    • (warning) At this meeting, we should check that IIdentifiable and/or IDescribable are not used as seperate entities.
  • IArgument needs a mechanism for identifying the type of argument e.g. File, Path, int double etc Very usful for providing customised GUI functionality
    • (question) Adrian to come up with proposal for next meeting
  • Using empty Temporal and ElementSet in the Input items.
    See http://public.wldelft.nl/display/OPENMI/Empty+Sets+in+the+Input+Items+-+Element+set+changing+in+time
  • Changing of the ElementSet during the time and different Times (steps) for different Elements
    • For the Time can be probably solved by missing values

3.6 Time

Suggestion 2.0, I
  public interface ITime {
      public double StampAsMJD();
      public double DurationAsMJD();
  }	
  public interface ITimeSet {
      public List<ITime> getTimes();
      bool HasDurations { get; }
  }
Suggestion 2.0, II
  public interface ITime {
      public double StampAsMJD();
  }	
  public interface ITimeSpan : ITime {
      public double DurationAsMJD();
  }	
  public interface ITimeSet {
      public List<ITime> getTimes();
      bool HasDurations { get; }
  }
Suggestion 2.0, III
  public interface ITimeSet
  {
      IList<double> TimeStamps { get; set; }
      IList<double> Durations { get; set; }

      TimeZoneInfo TimeZone { get; set; }

      bool HasDurations { get; }
  }
Suggestion 2.0, IV
  public interface ITimeSet
  {
      IList<double> TimeStamps { get; set; }
      TimeZoneInfo TimeZone { get; set; }
  }
  public interface ITimeSet
  {
      IList<double> Durations { get; set; }
  }

5. OATC Procedures

6. www.OpenMI.org and wiki.OpenMI.org

7. Miscellaneous issues

7.1. OpenMI Goes Linux

7.1.1. The OpenMI Linux version ...

... has been commited to SourceForge:http://openmi.svn.sourceforge.net/svnroot/openmi/branches/OpenMI-Version-1-Trunk/

7.1.2. The Linux HowTo pages are on the wiki

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:

  • OpenMI standard
  • sdk
  • ConfigurationEditor
  • some LCs of the examples

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

8. Tasks and unresolved issues

All tasks are handled by sourceForge. GOTO: OpenMI Tasks on source forge

9. Any other business

  • Check ideas mentioned in the poster of Jon Goodall - see meeting 22
  • No labels