Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. Question: what does isAvailable() mean in case of multiple consumers. Do all consumers need to have the same time(s)?
  2. Leave in for now, review after more implementation, one suggestion of modification bool isAvailable(whosAsking);
  3. (question) Will be discussed later during the meeting, Stef will show an example of using isAvailable(whosAsking);
  4. "string Validate()" / "bool IsValid(IExchangeItem item)" / "IsAvailable()", etc. (question) to be reviewed at this meeting

...

  1. Discussion/Conclusion: (thumbs up) We decided to extend the IsAvailable() method with an IExchangeItem argument, so that the caller can specify which availability he wants to check:
    bool IsAvailable(IExchangeItem querySpecification).
    The ValueDefinition/ElementSet/TimeSet definition of the querySpecification specifies exactly what is needed.
    Generally speaking, it is on of the consumers that is passed as the argument:
Code Block
java
java

IInputItem consumerThatIsAsking;
consumerThatIsAsking.TimeSet.Times[0] = requiredTime;
while (!providingOutputItem.IsAvailable(consumerThatIsAsking)) {
    providingOutputItem.Component.Update(providingOutputItem);
}
values = providingOutputItem.Values;

Related issue: The code above is actually representing the original 1.4 GetValues() call. So it might be wise, to put emphasis again on the still working 'pull approach', introduce this getValues() call:

Code Block
java
java
values = providingOutputItem.GetValues(consumerThatIsAsking);
  1. "string Validate()" / "bool IsValid(IExchangeItem item)" / "IsAvailable()", etc. (question) to be reviewed at this meeting
  1. Should we introduce a boolean argument that indicates whether the component should run in a pull mode (like in OpenMI 1.4) or in loop mode?
  2. Discuss component operation mode here comment from Peter Gijsbers need to be discussed
  3. 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'.
     

Discussion/Conclusion part 2: (thumbs up) We decided to let the LinkableComponent have a propery: CascadingCallsDisabled.
The default is false, indicating that the component is running in Pull Driven mode (there will be a cascade of update() calls. This Pull Driven mode has to be supported by every component.
If set to true, the component is expected to run Update()-step by Update-Step(), controlled by some outer world (which may be another component). If the component does not support this Update() by Update() way of running, it will throw an Exception when CascadingCallsDisabled = true is called;

...

  1. Decorator issues:
    • Do we need to recognize the type of decorator (time, space, SI-conversion)?
    • Do we want to support 3th-party decorators indeed?
      Discussion/Conclusion part 1: (thumbs up) We will add an Update() method to the OutputDecorator. The linkable component calls this Update() on all its decorators at the end of its own Update(). This actually is completely the same as what happens in the current 1.4 Wrapper: after IEngine.PerformTimeStep the wrapper updates the buffers.

...