#region Copyright
/*
* Copyright (c) 2005,2006,2007, OpenMI Association
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenMI Association nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY "OpenMI Association" ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL "OpenMI Association" BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#endregion
using System;
using System.Collections;
using OpenMI.Standard;
using System.Runtime.Remoting;
namespace RTCTools.OpenMI.Sdk.Wrapper
{
///
/// The IRunEngine is the interface the ModelEngine component
/// The Class RTCTools.OpenMI.Sdk.Wrapper.LinkableRunEngine will access the
/// model engine component through this interface.
///
///
/// None
///
public interface IRunEngine
{
///
/// Initialize will typically be invoked just after creation of the object
/// that implements the IRunEngine interface.
///
///
/// Hashtable with the same contents as the Component arguments
/// in the ILinkableComponent interface. Typically any information
/// needed for initialization of the model will be included in this table.
/// This could be path and file names for input files.
///
void Initialize(Hashtable properties);
///
/// This method will be invoked after all computations are completed. Deallocation of memory
/// and closing files could be implemented in this method
///
void Finish();
///
/// This method will be invoked after all computations are completed
/// and after the Finish method has been invoked
///
void Dispose();
///
/// This method will make the model engine perform one time step.
///
/// Returns true if the time step was completed,
/// otherwise it will return false
///
bool PerformTimeStep();
///
/// Get the current time of the model engine
///
/// The current time for the model engine
ITime GetCurrentTime();
///
/// Get the time for which the next input is needed for
/// a specific Quantity and ElementSet combination
///
/// ID for the quantity
/// ID for the ElementSet
/// ITimeSpan or ITimeStamp
ITime GetInputTime(string QuantityID, string ElementSetID);
///
/// Get earlist needed time, which can be used
/// to clear the buffer. For most time stepping model engines this
/// time will be the time for the previous time step.
///
/// TimeStamp
ITimeStamp GetEarliestNeededTime();
///
/// Sets values in the model engine
///
/// quantityID associated to the values
/// elementSetID associated to the values
/// The values
void SetValues(string QuantityID, string ElementSetID, IValueSet values);
///
/// Gets values from the model engine
///
/// quantityID associated to the requested values
/// elementSetID associated to the requested values
/// The requested values
IValueSet GetValues(string QuantityID, string ElementSetID);
///
/// In some situations a valied values cannot be return when the
/// RTCTools.OpenMI.Sdk.Wrapper.IRunEngine.GetValues is invoked. In such case a missing values
/// can be returned. The GetMissingValeusDefinition method can be used to query which definition
/// of a missing value that applies to this particular model component. Example of missing value
/// definition could be: -999.99
///
/// Missing value definition
double GetMissingValueDefinition();
///
/// Get the ComponentID. The component ID is the name of the non-populated component. This is typically
/// the product name of your model engine.
///
/// Component ID
string GetComponentID();
///
/// Get a description of your component. This description refers to the non-populated component. This is
/// typically a description of what your component does and which methods that are used. E.g. "Finite element
/// based ground water model".
///
/// Component description
string GetComponentDescription();
}
}