/* IMPORTANT NOTICE

(c) The Global CAPE-OPEN Consortium, 2000.

All rights are reserved unless specifically stated otherwise.



CAPE-OPEN and Global CAPE-OPEN are funded by the European Community under the Industrial

and Materials Technologies Programme (Brite-EuRam III),

under contracts BRPR-CT96-0293 and BPR-CT98-9005.



In addition, Global CAPE-OPEN follows the Intelligent Manufacturing Systems initiative

promoting collaboration between six international regions.



Visit the official web site of the standard at www.colan.org.



This file has been edited using the editor from Microsoft Visual Studio 6.0

This file can viewed properly with any basic editors and browsers (validation done under MS Windows and Unix)

*/



/* SPECIFICATION VERSION

Version number of this CAPE-OPEN CORBA IDL file = 0.9.3

Delivering date = 6th of March 2001

*/



/* COMPATIBILITY VERSION

CORBA Specification version number with which this file is compliant = 2.0 and upper

Visit the official web site of the CORBA standard at www.omg.org

*/





// ========================================================================

// CORBA IDL OF CAPE-OPEN STANDARD

// ========================================================================





// ---- The global scope is defined by a CapeOpen Module

module CapeOpen{







// ---- The scope of the common bases types

// Reference document: http://www.global-cape-open.org/03_CO_Methods_and_Tools_Recommendations.pdf

module Base{



	// elementary type definitions        

	typedef long		CapeLong;

	typedef short		CapeShort;



	typedef double		CapeDouble;

	typedef float		CapeFloat;



	typedef boolean		CapeBoolean;



	typedef char		CapeChar;

	typedef string		CapeString;

	typedef string		CapeDate;

	typedef string		CapeURL;



	typedef any			CapeVariant;

	typedef Object		CapeInterface;

	

	// sequence definitions

	typedef sequence<CapeLong>      CapeArrayLong;

	typedef sequence<CapeShort>     CapeArrayShort;

	typedef sequence<CapeDouble>    CapeArrayDouble;

	typedef sequence<CapeFloat>     CapeArrayFloat;

	typedef sequence<CapeChar>      CapeArrayChar;

	typedef sequence<CapeString>    CapeArrayString;

	typedef sequence<CapeBoolean>   CapeArrayBoolean;

	typedef sequence<CapeDate>      CapeArrayDate;

	typedef sequence<CapeURL>		CapeArrayURL;

	typedef sequence<CapeVariant>   CapeArrayVariant;

	typedef sequence<CapeInterface> CapeArrayInterface;

	

}; // END Base module







// ---- The scope of the CAPE-OPEN common interfaces

// To be fully completed in the next versions

module Common{

	

	// Definition of common types

	enum CapeValidationStatus{

		CAPE_NOT_VALIDATED,

		CAPE_INVALID,

		CAPE_VALID

	};



	typedef sequence<CapeValidationStatus> CapeArrayValidationStatus;





	// ---- Error common interface

	// Reference document: Error Common Interface.doc (http://SunSITE.Informatik.RWTH-Aachen.DE/bscw/bscw.cgi/0/722083 - GCO partners access only)

	module Error{

	

		exception ECapeUnknown{

			Base::CapeLong code;

			Base::CapeString description;

			Base::CapeString scope;

			Base::CapeString interfaceName;

			Base::CapeString operation;

			Base::CapeURL moreInfo;

		};

			

		/* Data Package */		

		exception ECapeData{

			Base::CapeLong code;

			Base::CapeString description;

			Base::CapeString scope;

			Base::CapeString interfaceName;

			Base::CapeString operation;

			Base::CapeURL moreInfo;

		};

			

		/* Data Package */	

		exception ECapeLicenceError{

			Base::CapeLong code;

			Base::CapeString description;

			Base::CapeString scope;

			Base::CapeString interfaceName;

			Base::CapeString operation;

			Base::CapeURL moreInfo;

		};

		

		/* Data Package */

		exception ECapeBadCOParameter{

			Base::CapeLong code;

			Base::CapeString description;

			Base::CapeString scope;

			Base::CapeString interfaceName;

			Base::CapeString operation;

			Base::CapeURL moreInfo;

			Base::CapeString parameterName;

//			Common::Parameter::ICapeParameter ICapeParameter par;  //Compilation Error-to be solved shortly

		};

			

		/* Data Package */	

		exception ECapeBadArgument{

			Base::CapeLong code;

			Base::CapeString description;

			Base::CapeString scope;

			Base::CapeString interfaceName;

			Base::CapeString operation;

			Base::CapeURL moreInfo;

			Base::CapeShort position;

		};

	

		/* Data Package */

		exception ECapeInvalidArgument{

			Base::CapeLong code;

			Base::CapeString description;

			Base::CapeString scope;

			Base::CapeString interfaceName;

			Base::CapeString operation;

			Base::CapeURL moreInfo;

			Base::CapeShort position;

		};			

		

		/* Data Package */

		exception ECapeOutOfBounds{

			Base::CapeLong code;

			Base::CapeString description;

			Base::CapeString scope;

			Base::CapeString interfaceName;

			Base::CapeString operation;

			Base::CapeURL moreInfo;

			Base::CapeShort position;

			Base::CapeDouble lowerBound;

			Base::CapeDouble upperBound;

			Base::CapeDouble value;

			Base::CapeString type;

		};			

		

		/* Implementation Package */	

		exception ECapeNoImpl{

			Base::CapeLong code;

			Base::CapeString description;

			Base::CapeString scope;

			Base::CapeString interfaceName;

			Base::CapeString operation;

			Base::CapeURL moreInfo;

		};

		

		/* Implementation Package */

		exception ECapeImplementation{

			Base::CapeLong code;

			Base::CapeString description;

			Base::CapeString scope;

			Base::CapeString interfaceName;

			Base::CapeString operation;

			Base::CapeURL moreInfo;

		};

	

		/* Implementation Package */	

		exception ECapeLimitedImpl{

			Base::CapeLong code;

			Base::CapeString description;

			Base::CapeString scope;

			Base::CapeString interfaceName;

			Base::CapeString operation;

			Base::CapeURL moreInfo;

		};

			

		/* Computation Package */

		exception ECapeOutOfResources{

			Base::CapeLong code;

			Base::CapeString description;

			Base::CapeString scope;

			Base::CapeString interfaceName;

			Base::CapeString operation;

			Base::CapeURL moreInfo;

			Base::CapeDouble lowerBound;

			Base::CapeDouble upperBound;

			Base::CapeDouble value;

			Base::CapeString type;

		};

	

		/* Computation Package */

		exception ECapeNoMemory{

			Base::CapeLong code;

			Base::CapeString description;

			Base::CapeString scope;

			Base::CapeString interfaceName;

			Base::CapeString operation;

			Base::CapeURL moreInfo;

			Base::CapeDouble lowerBound;

			Base::CapeDouble upperBound;

			Base::CapeDouble value;

			Base::CapeString type;

		};

			

		/* Computation Package */	

		exception ECapeTimeOut{

			Base::CapeLong code;

			Base::CapeString description;

			Base::CapeString scope;

			Base::CapeString interfaceName;

			Base::CapeString operation;

			Base::CapeURL moreInfo;

			Base::CapeDouble lowerBound;

			Base::CapeDouble upperBound;

			Base::CapeDouble value;

			Base::CapeString type;

		};

			

		/* Computation Package */	

		exception ECapeFailedInitialisation{

			Base::CapeLong code;

			Base::CapeString description;

			Base::CapeString scope;

			Base::CapeString interfaceName;

			Base::CapeString operation;

			Base::CapeURL moreInfo;

		};

	

		/* Computation Package */

		exception ECapeSolvingError{

			Base::CapeLong code;

			Base::CapeString description;

			Base::CapeString scope;

			Base::CapeString interfaceName;

			Base::CapeString operation;

			Base::CapeURL moreInfo;

		};

			

		/* Computation Package */

		exception ECapeBadInvOrder{

			Base::CapeLong code;

			Base::CapeString description;

			Base::CapeString scope;

			Base::CapeString interfaceName;

			Base::CapeString operation;

			Base::CapeURL moreInfo;

			Base::CapeString requestedOperation;

		};

		

		/* Computation Package */

		exception ECapeInvalidOperation{

			Base::CapeLong code;

			Base::CapeString description;

			Base::CapeString scope;

			Base::CapeString interfaceName;

			Base::CapeString operation;

			Base::CapeURL moreInfo;

		};

			

		/* Computation Package */

		exception ECapeComputation{

			Base::CapeLong code;

			Base::CapeString description;

			Base::CapeString scope;

			Base::CapeString interfaceName;

			Base::CapeString operation;

			Base::CapeURL moreInfo;

		};

			

		/* Persistence Package */

		exception ECapeIllegalAccess{

			Base::CapeLong code;

			Base::CapeString description;

			Base::CapeString scope;

			Base::CapeString interfaceName;

			Base::CapeString operation;

			Base::CapeURL moreInfo;

		};

		

		/* Persistence Package */	

		exception ECapePersistence{

			Base::CapeLong code;

			Base::CapeString description;

			Base::CapeString scope;

			Base::CapeString interfaceName;

			Base::CapeString operation;

			Base::CapeURL moreInfo;

		};

			

		/* Persistence Package */

		exception ECapePersistenceNotFound{

			Base::CapeLong code;

			Base::CapeString description;

			Base::CapeString scope;

			Base::CapeString interfaceName;

			Base::CapeString operation;

			Base::CapeURL moreInfo;

			Base::CapeString itemName;

		};

	

		/* Persistence Package */

		exception ECapePersistenceOverflow{

			Base::CapeLong code;

			Base::CapeString description;

			Base::CapeString scope;

			Base::CapeString interfaceName;

			Base::CapeString operation;

			Base::CapeURL moreInfo;

			Base::CapeDouble lowerBound;

			Base::CapeDouble upperBound;

			Base::CapeDouble value;

			Base::CapeString type;

		};

			

		/* Persistence Package */		

		exception ECapePersistenceSystemError{

			Base::CapeLong code;

			Base::CapeString description;

			Base::CapeString scope;

			Base::CapeString interfaceName;

			Base::CapeString operation;

			Base::CapeURL moreInfo;

		};



	}; // END Error module





	// ---- Identification common interface 

	// Reference document:

	module Identification{

	

		// Forward declaration of interfaces

		interface ICapeIdentification;



		// Interface sequence

		typedef sequence<ICapeIdentification> CapeArrayIdentification;



		interface ICapeIdentification{

			Base::CapeString GetComponentName() raises (Error::ECapeUnknown);

			void SetComponentName(in Base::CapeString name) raises (Error::ECapeUnknown, Error::ECapeInvalidArgument);

			Base::CapeString GetComponentDescription() raises (Error::ECapeUnknown);

			void SetComponentDescription(in Base::CapeString desc) raises (Error::ECapeUnknown, Error::ECapeInvalidArgument);

		};



	}; // END Identification module





	// ---- Parameter common interface

	// Reference document:

	module Parameter{

	

		// Forward declaration of interfaces

		interface ICapeParameter;

		interface ICapeParameterSpec;

		interface ICapeRealParameterSpec;

		interface ICapeIntegerParameterSpec;

		interface ICapeOptionParameterSpec;

		interface ICapeBooleanParameterSpec;

		interface ICapeArrayParameterSpec;



		// Interface sequence

		typedef sequence<ICapeParameter> CapeArrayParameter;

		typedef sequence<ICapeParameterSpec> CapeArrayParameterSpec;

		typedef sequence<ICapeRealParameterSpec> CapeArrayRealParameterSpec;

		typedef sequence<ICapeIntegerParameterSpec> CapeArrayIntegerParameterSpec;

		typedef sequence<ICapeOptionParameterSpec> CapeArrayOptionParameterSpec;

		typedef sequence<ICapeBooleanParameterSpec> CapeArrayBooleanParameterSpec;

		typedef sequence<ICapeArrayParameterSpec> CapeArrayArrayParameterSpec;



		// Definition of Enum

		enum CapeParamType{

			CAPE_REAL,

			CAPE_INT,

			CAPE_OPTION,

			CAPE_BOOLEAN,

			CAPE_ARRAY

		};



		enum CapeParamMode{

			CAPE_INPUT,

			CAPE_OUTPUT,

			CAPE_INPUT_OUTPUT

		};



		typedef sequence<CapeParamType> CapeArrayParamType;

		typedef sequence<CapeParamMode> CapeArrayParamMode;



		interface ICapeParameter: Identification::ICapeIdentification{

			Base::CapeVariant GetValue() raises (Error::ECapeUnknown);

			void SetValue(in Base::CapeVariant value) raises (Error::ECapeUnknown, Error::ECapeInvalidArgument);

			Common::CapeValidationStatus GetValStatus() raises (Error::ECapeUnknown);

			CapeParamMode GetMode() raises (Error::ECapeUnknown);

			void SetMode(in CapeParamMode mode) raises (Error::ECapeUnknown, Error::ECapeInvalidArgument);

			ICapeParameterSpec GetSpecification() raises (Error::ECapeUnknown, Error::ECapeNoImpl);

			Base::CapeBoolean Validate(out Base::CapeString message) raises (Error::ECapeUnknown, Error::ECapeOutOfBounds);

			void Reset() raises (Error::ECapeUnknown);

		};



		interface ICapeParameterSpec: Identification::ICapeIdentification{

			CapeParamType GetType() raises (Error::ECapeUnknown);

			Base::CapeVariant GetDimensionality() raises (Error::ECapeUnknown);

		};



		interface ICapeRealParameterSpec: ICapeParameterSpec{

			Base::CapeDouble GetDefaultValue() raises (Error::ECapeUnknown);

			Base::CapeDouble GetLowerBound() raises (Error::ECapeUnknown);

			Base::CapeDouble GetUpperBound() raises (Error::ECapeUnknown);

			Base::CapeBoolean Validate(in Base::CapeDouble value, out Base::CapeString message) raises (Error::ECapeUnknown, Error::ECapeInvalidArgument, Error::ECapeOutOfBounds);

		};

		

		interface ICapeIntegerParameterSpec: ICapeParameterSpec{

			Base::CapeLong GetDefaultValue() raises (Error::ECapeUnknown);

			Base::CapeLong GetLowerBound() raises (Error::ECapeUnknown);

			Base::CapeLong GetUpperBound() raises (Error::ECapeUnknown);

			Base::CapeBoolean Validate(in Base::CapeLong value, out Base::CapeString message) raises (Error::ECapeUnknown, Error::ECapeInvalidArgument, Error::ECapeOutOfBounds);

		};



		interface ICapeOptionParameterSpec: ICapeParameterSpec{

			Base::CapeString GetDefaultValue() raises (Error::ECapeUnknown);

			Base::CapeArrayString GetOptionList() raises (Error::ECapeUnknown);

			Base::CapeBoolean RestrictedToList() raises (Error::ECapeUnknown);

			Base::CapeBoolean Validate(in Base::CapeString value, out Base::CapeString message) raises (Error::ECapeUnknown, Error::ECapeInvalidArgument, Error::ECapeOutOfBounds);

		};



		interface ICapeBooleanParameterSpec: ICapeParameterSpec{

			Base::CapeBoolean GetDefaultValue() raises (Error::ECapeUnknown);

			Base::CapeBoolean Validate(in Base::CapeBoolean value, out Base::CapeString message) raises (Error::ECapeUnknown, Error::ECapeInvalidArgument, Error::ECapeOutOfBounds);

		};



		interface ICapeArrayParameterSpec: ICapeParameterSpec{

			Base::CapeLong GetNumDimensions() raises (Error::ECapeUnknown);

			Base::CapeArrayLong GetSize() raises (Error::ECapeUnknown);

			CapeArrayParameterSpec GetItemsSpecification() raises (Error::ECapeUnknown);

			Base::CapeBoolean Validate(in Base::CapeVariant value, out Base::CapeString message) raises (Error::ECapeUnknown, Error::ECapeInvalidArgument, Error::ECapeOutOfBounds);

		};



	}; // END Parameter module





}; // END Common module







// ---- The scope of the Thermodynamic specification

// Reference document: http://www.global-cape-open.org/04_CO_Thermodynamics_and_PhysProps.pdf

module Thrm{

	

	// ----

	module Cose{

		

		// Forward declaration of interfaces

		interface ICapeThermoMaterialObject;

		interface ICapeThermoReliability;

		interface ICapeThermoMaterialTemplate;

		interface ICapeThermoMaterialTemplateSystem;



		// Interface sequence

		typedef sequence<ICapeThermoMaterialObject> CapeArrayThermoMaterialObject;

		typedef sequence<ICapeThermoReliability> CapeArrayThermoReliability;

		typedef sequence<ICapeThermoMaterialTemplate> CapeArrayThermoMaterialTemplate;

		typedef sequence<ICapeThermoMaterialTemplateSystem> CapeArrayThermoMaterialTemplateSystem;

		

		interface ICapeThermoReliability {

		// contents to be filled in later

		};

		

		interface ICapeThermoMaterialObject {

			Base::CapeArrayString GetComponentIds() raises (Common::Error::ECapeUnknown);

			Base::CapeArrayString GetPhaseIds() raises (Common::Error::ECapeUnknown);

			Base::CapeLong GetNumComponents() raises (Common::Error::ECapeUnknown);

			Base::CapeArrayVariant GetUniversalConstant(in Base::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeNoImpl);

			Base::CapeArrayVariant GetComponentConstant(in Base::CapeArrayString props, in Base::CapeArrayString compIds) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);

			void CalcProp(in Base::CapeArrayString props, in Base::CapeArrayString phases, in Base::CapeString calcType) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeSolvingError, Common::Error::ECapeOutOfBounds, Common::Error::ECapeLicenceError);

			Base::CapeArrayDouble GetProp(in Base::CapeString property, in Base::CapeString phase, in Base::CapeArrayString compIds, in Base::CapeString calcType, in Base::CapeString basis) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);

			void SetProp(in Base::CapeString property, in Base::CapeString phase, in Base::CapeArrayString compIds, in Base::CapeString calcType, in Base::CapeString basis, in Base::CapeArrayDouble values) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);

			void CalcEquilibrium(in Base::CapeString flashType, in Base::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder, Common::Error::ECapeSolvingError, Common::Error::ECapeOutOfBounds, Common::Error::ECapeLicenceError);

			Base::CapeArrayBoolean PropCheck(in Base::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);

			CapeArrayThermoReliability ValidityCheck(in  Base::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);

		};

		

		interface ICapeThermoMaterialTemplate : Common::Identification::ICapeIdentification {

			ICapeThermoMaterialObject CreateMaterialObject() raises (Common::Error::ECapeUnknown, Common::Error::ECapeOutOfResources, Common::Error::ECapeLicenceError);

			void DestroyMaterialObject(in ICapeThermoMaterialObject obj) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);

			void SetProp (in Base::CapeString property, in Base::CapeArrayDouble values) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);

		};



		interface ICapeThermoMaterialTemplateSystem : Common::Identification::ICapeIdentification {

			Base::CapeArrayString GetMaterialTemplates() raises (Common::Error::ECapeUnknown);

			ICapeThermoMaterialTemplate ResolveMaterialTemplate(in Base::CapeString materialTemplateName) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);

		};

	

	}; // END Cose module

	

	// ----

	module ThermoSystem{

		

		// Forward declaration of interface

		interface ICapeThermoPropertyPackage;

		interface ICapeThermoSystem;

		

		// Interface sequence

		typedef sequence<ICapeThermoPropertyPackage> CapeArrayThermoPropertyPackage;

		typedef sequence<ICapeThermoSystem> CapeArrayThermoSystem;



		interface ICapeThermoSystem : Common::Identification::ICapeIdentification {

			Base::CapeArrayString GetPropertyPackages() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeNoImpl);

			ICapeThermoPropertyPackage ResolvePropertyPackage(in Base::CapeString propPkg) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeFailedInitialisation);

		};

		

		interface ICapeThermoPropertyPackage : Common::Identification::ICapeIdentification {

			Base::CapeArrayString GetPhaseList() raises (Common::Error::ECapeUnknown);

			void GetComponentList  (out Base::CapeArrayString compIds, out Base::CapeArrayString formulae, out Base::CapeArrayString name, out Base::CapeArrayDouble boilTemps, out Base::CapeArrayDouble molwt, out Base::CapeArrayString casno) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);

			Base::CapeArrayVariant GetUniversalConstant(in Cose::ICapeThermoMaterialObject matObj, in Base::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);

			Base::CapeArrayVariant GetComponentConstant(in Cose::ICapeThermoMaterialObject matObj, in Base::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);

			void CalcProp(in Cose::ICapeThermoMaterialObject mobject, in Base::CapeArrayString props, in Base::CapeArrayString phases, in Base::CapeString CalcType) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeSolvingError, Common::Error::ECapeOutOfBounds, Common::Error::ECapeLicenceError);

			void CalcEquilibrium(in Cose::ICapeThermoMaterialObject matObj, in Base::CapeString flashType, in Base::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeSolvingError, Common::Error::ECapeOutOfBounds, Common::Error::ECapeLicenceError);

			Base::CapeArrayBoolean PropCheck(in Cose::ICapeThermoMaterialObject matObj, in Base::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);

			Cose::CapeArrayThermoReliability ValidityCheck(in Cose::ICapeThermoMaterialObject matObj, in  Base::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);

			Base::CapeArrayString GetPropList() raises (Common::Error::ECapeUnknown);

		};

		

	}; // END ThermoSystem module

	

	// ----

	module CalculationRoutine {

	

		// Forward declaration of interfaces

		interface ICapeThermoCalculationRoutine;

		

		// Interface sequence

		typedef sequence<ICapeThermoCalculationRoutine> CapeArrayThermoCalculationRoutine;

		

		interface ICapeThermoCalculationRoutine : Common::Identification::ICapeIdentification {

			void CalcProp(in Cose::ICapeThermoMaterialObject matObj, in Base::CapeArrayString props, in Base::CapeArrayString phases, in Base::CapeString calcType) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder, Common::Error::ECapeSolvingError, Common::Error::ECapeOutOfBounds);

			void PropList(out Base::CapeArrayString props, out Base::CapeArrayString phases, out Base::CapeArrayString calcType) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);

			Base::CapeArrayBoolean PropCheck(in Cose::ICapeThermoMaterialObject matObj, in Base::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);

			Cose::CapeArrayThermoReliability ValidityCheck(in Cose::ICapeThermoMaterialObject matObj, in Base::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);

		};



	}; // END CalculationRoutine module

	

	// ----

	module EquilibriumServer {

	

		// Forward declaration of interfaces

		interface ICapeThermoEquilibriumServer;

		

		// Interface sequence

		typedef  sequence<ICapeThermoEquilibriumServer> CapeArrayThermoEquilibriumServer;

		

		interface ICapeThermoEquilibriumServer : Common::Identification::ICapeIdentification {

			void CalcEquilibrium(in Cose::ICapeThermoMaterialObject matObj, in Base::CapeString flashType, in Base::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder, Common::Error::ECapeSolvingError, Common::Error::ECapeOutOfBounds);

			void PropList(out Base::CapeArrayString flashType, out Base::CapeArrayString props, out Base::CapeArrayString phases, out Base::CapeArrayString calcType) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);

			Base::CapeArrayBoolean PropCheck(in Cose::ICapeThermoMaterialObject matObj, in Base::CapeString flashType, in Base::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);

			Cose::CapeArrayThermoReliability ValidityCheck(in Cose::ICapeThermoMaterialObject matObj, in Base::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);

		};

		

	}; // END EquilibriumServer module





}; // END Thrm module







// ---- The scope of the Numerical specifications

module Numr{



	// ---- The scopes of the Numerical Solvers specifications

	// Reference document: http://www.global-cape-open.org/06_CO_Solvers.pdf

	

	// ---- The scope of the Utility

	module Utility{

		

		struct CapePublicParameter{

			Base::CapeString 	name;

			Base::CapeString	description;

			Base::CapeLong 		lowerBound;

			Base::CapeLong 		upperBound;

			Base::CapeVariant   defaultValue;

			Base::CapeVariant	currentValue;

		};

		typedef sequence<CapePublicParameter> CapeArrayPublicParameter;

			

	}; // END Utility module

		

	// ---- The scope of the Eso

	module Eso{

			

		enum CapeESOType{

			LA,

			NLA,

			DAE,

			GLOBAL

		};



		enum CapeMatrixType{

			FULL,

			UNSTRUCTURED,

			BANDED

		};



		enum CapeMatrixOrdering{

			ROW,

			COLUMN,

			OTHER

		};



		// Foward declaration of interfaces

		interface ICapeNumericMatrix;

		interface ICapeNumericFullMatrix;

		interface ICapeNumericUnstructuredMatrix;

		interface ICapeNumericBandedMatrix;

		interface ICapeNumericESOManager;

		interface ICapeNumericESO;

		interface ICapeNumericLAESO;

		interface ICapeNumericNLAESO;

		interface ICapeNumericDAESO;

		interface ICapeNumericGlobalESO;

		interface ICapeNumericGlobalLAESO;

		interface ICapeNumericGlobalNLAESO;

		interface ICapeNumericGlobalDAESO;



		// Interface sequence

		typedef sequence<ICapeNumericMatrix> CapeArrayNumericMatrix;

		typedef sequence<ICapeNumericFullMatrix> CapeArrayNumericFullMatrix;

		typedef sequence<ICapeNumericUnstructuredMatrix> CapeArrayNumericUnstructuredMatrix;

		typedef sequence<ICapeNumericBandedMatrix> CapeArrayNumericBandedMatrix;

		typedef sequence<ICapeNumericESOManager> CapeArrayNumericESOManager;

		typedef sequence<ICapeNumericESO> CapeArrayNumericESO;

		typedef sequence<ICapeNumericLAESO> CapeArrayNumericLAESO;

		typedef sequence<ICapeNumericNLAESO> CapeArrayNumericNLAESO;

		typedef sequence<ICapeNumericDAESO> CapeArrayNumericDAESO;

		typedef sequence<ICapeNumericGlobalESO> CapeArrayNumericGlobalESO;

		typedef sequence<ICapeNumericGlobalLAESO> CapeArrayNumericGlobalLAESO;

		typedef sequence<ICapeNumericGlobalNLAESO> CapeArrayNumericGlobalNLAESO;

		typedef sequence<ICapeNumericGlobalDAESO> CapeArrayNumericGlobalDAESO;

		

		interface ICapeNumericMatrix  :  Common::Identification::ICapeIdentification {

			Base::CapeLong GetNumRows() raises (Common::Error::ECapeUnknown);

			Base::CapeLong GetNumCols() raises (Common::Error::ECapeUnknown);

			Base::CapeBoolean QuerySymmetric() raises (Common::Error::ECapeUnknown);

			CapeMatrixOrdering QueryOrdering() raises (Common::Error::ECapeUnknown);

			CapeMatrixType QueryType() raises (Common::Error::ECapeUnknown);

			Base::CapeArrayDouble GetValues() raises (Common::Error::ECapeUnknown);

		};

		

		interface ICapeNumericFullMatrix : ICapeNumericMatrix {

		};

		

		interface ICapeNumericUnstructuredMatrix : ICapeNumericMatrix {

			void GetStructure(out Base::CapeArrayDouble rowIndices, out Base::CapeArrayDouble colIndices) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);

		};

		

		interface ICapeNumericBandedMatrix : ICapeNumericMatrix {

			Base::CapeLong GetBandWidth() raises (Common::Error::ECapeUnknown);

		};

		

		interface ICapeNumericESOManager : Common::Identification::ICapeIdentification {

			ICapeNumericESO CreateESO(in CapeESOType typeOfESO) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeLimitedImpl, Common::Error::ECapeNoMemory, Common::Error::ECapeFailedInitialisation);

		};



		interface ICapeNumericESO :  Common::Identification::ICapeIdentification {

			Utility::CapeArrayPublicParameter GetParameterList() raises (Common::Error::ECapeUnknown);

			void SetParameter(in Base::CapeString parameterName, in Base::CapeVariant parameterValue) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds);

			Base::CapeLong GetNumVars() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);

			Base::CapeLong GetNumEqns() raises (Common::Error::ECapeUnknown);

			void SetFixedVariables(in Base::CapeArrayLong varIndices,in Base::CapeArrayDouble varValues) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds);

			void SetAllVariables(in Base::CapeArrayDouble varValues) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds);

			void SetVariables(in Base::CapeArrayLong varIndices,in Base::CapeArrayDouble varValues) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds);

			Base::CapeArrayDouble GetAllVariables() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);

			Base::CapeArrayDouble GetVariables(in Base::CapeArrayLong varIndices) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds);

			Base::CapeArrayDouble GetAllResiduals() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder, Common::Error::ECapeFailedInitialisation);

			Base::CapeArrayDouble GetResiduals(in Base::CapeArrayLong eqnIndices) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds, Common::Error::ECapeBadInvOrder, Common::Error::ECapeFailedInitialisation);

			ICapeNumericMatrix GetJacobianStruct() raises (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl);

			ICapeNumericMatrix GetAllJacobianValues() raises (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl);

			Base::CapeArrayDouble GetJacobianValues(in Base::CapeArrayLong indices) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeNoImpl, Common::Error::ECapeOutOfBounds);

			void SetVariablesIndex(in Base::CapeArrayLong varIndexes) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds);

			Base::CapeArrayDouble GetLowerBounds() raises (Common::Error::ECapeUnknown);

			Base::CapeArrayDouble GetUpperBounds() raises (Common::Error::ECapeUnknown);

			void Destroy() raises (Common::Error::ECapeUnknown);

		};

			

		interface ICapeNumericLAESO : ICapeNumericESO {

			void SetLHS(in ICapeNumericMatrix values) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds);

			void SetRHS(in Base::CapeArrayDouble values) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds);

			ICapeNumericMatrix GetLHS() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);

			Base::CapeArrayDouble GetRHS() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);

		};

		

		interface ICapeNumericNLAESO : ICapeNumericESO {

		};

		

		

		interface ICapeNumericDAESO : ICapeNumericESO {

			void SetAllDerivatives(in Base::CapeArrayDouble varValues) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds);

			Base::CapeArrayDouble GetAllDerivatives() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);

			Base::CapeArrayDouble GetDerivatives(in Base::CapeArrayLong varIndices) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds);

			ICapeNumericMatrix GetDiffJacobianStruct() raises (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl);

			ICapeNumericMatrix GetAllDiffJacobianValues() raises (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl);

			Base::CapeArrayDouble GetDiffJacobianValues(in Base::CapeArrayLong indices) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeNoImpl, Common::Error::ECapeOutOfBounds);

			void SetIndependentVar(in Base::CapeDouble indVar) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);

			Base::CapeDouble GetIndependentVar() raises (Common::Error::ECapeUnknown);

		};

		

		interface ICapeNumericGlobalESO : ICapeNumericESO {

			void SetListOfESOs(in CapeArrayNumericESO listOfESOs) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds, Common::Error::ECapeImplementation);

			CapeArrayNumericESO GetListOfESOs() raises (Common::Error::ECapeUnknown, Common::Error::ECapeImplementation);

		};

		

		interface ICapeNumericGlobalLAESO : ICapeNumericLAESO, ICapeNumericGlobalESO {

		};

		

		interface ICapeNumericGlobalNLAESO : ICapeNumericNLAESO, ICapeNumericGlobalESO {

		};

		

		interface ICapeNumericGlobalDAESO : ICapeNumericDAESO, ICapeNumericGlobalESO {

		};

		

	};  // END Eso module

	

	// ---- The scope of the Model

	module Model{



		enum CapeModelType{

			CONTINUOUS,

			HIERARCHICAL,

			AGGREGATE

		};

		

		enum CapeEventType{

			BASIC,

			COMPOSITE,

			BINARY,

			UNARY

		};

		

		enum CapeEventInfoKind{

			EXTERNAL,

			INTERNAL

		};

		

		enum CapeLogicalRelation{

			GEQ,

			LEQ,

			GT,

			LT

		};

		

		enum CapeLogicalOperator{

			AND,

			OR,

			NOT

		};



		// Foward declaration of interfaces

		interface ICapeNumericModelManager;

		interface ICapeNumericModel;

		interface ICapeNumericContinuousModel;

		interface ICapeNumericHierarchicalModel;

		interface ICapeNumericAggregateModel;

		interface ICapeNumericSTN;

		interface ICapeNumericEvent;

		interface ICapeNumericBasicEvent;

		interface ICapeNumericCompositeEvent;

		interface ICapeNumericBinaryEvent;

		interface ICapeNumericUnaryEvent;

		interface ICapeNumericEventInfo;

		interface ICapeNumericExternalEventInfo;

		interface ICapeNumericInternalEventInfo;



		// Interface sequence

		typedef sequence<ICapeNumericModelManager> CapeArrayNumericModelManager;

		typedef sequence<ICapeNumericModel> CapeArrayNumericModel;

		typedef sequence<ICapeNumericContinuousModel> CapeArrayNumericContinuousModel;

		typedef sequence<ICapeNumericHierarchicalModel> CapeArrayNumericHierarchicalModel;

		typedef sequence<ICapeNumericAggregateModel> CapeArrayNumericAggregateModel;

		typedef sequence<ICapeNumericSTN> CapeArrayNumericSTN;

		typedef sequence<ICapeNumericEvent> CapeArrayNumericEvent;

		typedef sequence<ICapeNumericBasicEvent> CapeArrayNumericBasicEvent;

		typedef sequence<ICapeNumericCompositeEvent> CapeArrayNumericCompositeEvent;

		typedef sequence<ICapeNumericBinaryEvent> CapeArrayNumericBinaryEvent;

		typedef sequence<ICapeNumericUnaryEvent> CapeArrayNumericUnaryEvent;

		typedef sequence<ICapeNumericEventInfo> CapeArrayNumericEventInfo;

		typedef sequence<ICapeNumericExternalEventInfo> CapeArrayNumericExternalEventInfo;

		typedef sequence<ICapeNumericInternalEventInfo> CapeArrayNumericInternalEventInfo;

		

		interface ICapeNumericModelManager : Common::Identification::ICapeIdentification {

			ICapeNumericModel CreateModel(in CapeModelType typeOfTheModel) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds, Common::Error::ECapeOutOfResources);

		};

			

		interface ICapeNumericModel : Common::Identification::ICapeIdentification {

			Utility::CapeArrayPublicParameter GetParameterList() raises (Common::Error::ECapeUnknown);

			void SetParameter(in Base::CapeString parameterName, in Base::CapeVariant parameterValue) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds);

			Base::CapeLong SetVariablesIndex(in Base::CapeArrayLong varIndexes) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds);

			Eso::ICapeNumericESO SetActiveESO() raises (Common::Error::ECapeUnknown, Common::Error::ECapeSolvingError, Common::Error::ECapeBadInvOrder);

			Eso::ICapeNumericESO GetActiveESO() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);

			void SetCommonESO(in Eso::ICapeNumericESO anESO) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);

			Eso::ICapeNumericESO GetCommonESO() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);

			ICapeNumericExternalEventInfo AddExternalEvent(in ICapeNumericEvent anEvent) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder);

			void Destroy() raises (Common::Error::ECapeUnknown);

		};

		

		interface ICapeNumericContinuousModel : ICapeNumericModel {

		};

		

		interface ICapeNumericHierarchicalModel : ICapeNumericModel {

			CapeArrayNumericSTN GetSTNList() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);

		};

		

		interface ICapeNumericAggregateModel : ICapeNumericModel {

			CapeArrayNumericModel GetModelList() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);

			void SetConnectionEquation(in ICapeNumericModel inputModel, in Base::CapeLong inputIndex, in ICapeNumericModel outputModel, in Base::CapeLong outputIndex) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds);

		};

		

		interface ICapeNumericSTN : Common::Identification::ICapeIdentification {

			void SetCurrentState(in Base::CapeString theStateName) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds);

			Base::CapeString GetCurrentState() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);

			ICapeNumericModel GetParentModel() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);

			CapeArrayNumericInternalEventInfo GetPossibleTransitions() raises (Common::Error::ECapeUnknown,  Common::Error::ECapeBadInvOrder);

			Base::CapeDouble GetStateTransitions(in Base::CapeString fromState, out CapeArrayNumericEventInfo eventList, out Base::CapeArrayString stateList) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds);

			Base::CapeArrayString GetStateList() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);

			ICapeNumericModel GetStateModel(in Base::CapeString stateName) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds);

			Base::CapeString MoveToNextState(in ICapeNumericEventInfo firedEvent) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds);

		};

		

		interface ICapeNumericEvent : Common::Identification::ICapeIdentification {

			Base::CapeBoolean eval() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);

			CapeEventType QueryType() raises (Common::Error::ECapeUnknown);

		};

			

		interface ICapeNumericBasicEvent : ICapeNumericEvent {

			Base::CapeLong GetVariable() raises (Common::Error::ECapeUnknown);

			CapeLogicalRelation GetLogicalRelation() raises (Common::Error::ECapeUnknown);

			Base::CapeDouble GetValue() raises (Common::Error::ECapeUnknown);

		};

		

		interface ICapeNumericCompositeEvent : ICapeNumericEvent {

			ICapeNumericEvent GetRightOperand() raises (Common::Error::ECapeUnknown);

			CapeLogicalOperator GetLogicalOperator() raises (Common::Error::ECapeUnknown);

		};

		

		interface ICapeNumericBinaryEvent : ICapeNumericCompositeEvent {

			ICapeNumericEvent GetLeftOperand() raises (Common::Error::ECapeUnknown);

		};

		

		interface ICapeNumericUnaryEvent : ICapeNumericCompositeEvent {

		};

		

		interface ICapeNumericEventInfo : Common::Identification::ICapeIdentification {

			CapeEventInfoKind QueryKind() raises (Common::Error::ECapeUnknown);

			ICapeNumericEvent GetSubEvent() raises (Common::Error::ECapeUnknown);

			ICapeNumericEvent GetEvent() raises (Common::Error::ECapeUnknown);

		};

		

		interface ICapeNumericExternalEventInfo : ICapeNumericEventInfo {

		};

		

		interface ICapeNumericInternalEventInfo : ICapeNumericEventInfo {

			ICapeNumericSTN GetSTN() raises (Common::Error::ECapeUnknown);

			Base::CapeString GetToState() raises (Common::Error::ECapeUnknown);

		};

		

	}; // END Model module

		

	

	// ---- The scope of the Solver

	module Solver{

	

		enum CapeSolverType{

			LA,

			NLA,

			DAE

		};

		

		// Foward declaration of interfaces

		interface ICapeNumericSolverManager;

		interface ICapeNumericSolver;

		interface ICapeNumericLASolver;

		interface ICapeNumericNLASolver;

		interface ICapeNumericDAESolver;

		

		// Interface sequence

		typedef sequence<ICapeNumericDAESolver> CapeArrayNumericDAESolver;

		typedef sequence<ICapeNumericSolverManager> CapeArrayNumericSolverManager;

		typedef sequence<ICapeNumericSolver> CapeArrayNumericSolverComponent;

		typedef sequence<ICapeNumericLASolver> CapeArrayNumericLASolver;

		typedef sequence<ICapeNumericNLASolver> CapeArrayNumericNLASolver;

		

		interface ICapeNumericSolverManager :  Common::Identification::ICapeIdentification {

			ICapeNumericSolver CreateSolver(in CapeSolverType type,in Model::ICapeNumericModel theModel) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds, Common::Error::ECapeOutOfResources);

		};

		

		interface ICapeNumericSolver : Common::Identification::ICapeIdentification {

			Utility::CapeArrayPublicParameter GetParameterList() raises (Common::Error::ECapeUnknown);

			void SetParameter(in Base::CapeString parameterName, in Base::CapeVariant parameterValue) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds);

			Base::CapeLong Solve() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder, Common::Error::ECapeSolvingError, Common::Error::ECapeOutOfResources, Common::Error::ECapeTimeOut);

			Base::CapeArrayDouble GetSolution() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);

			Base::CapeInterface SetReportingInterface() raises (Common::Error::ECapeUnknown);

			void Destroy() raises (Common::Error::ECapeUnknown);

		};

			

		interface ICapeNumericLASolver : ICapeNumericSolver {

		};

			

		interface ICapeNumericNLASolver : ICapeNumericSolver {

			void SetCvgTolerance(in Base::CapeDouble cvgValue) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds);

			Base::CapeDouble GetCvgTolerance() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);

			void SetMaxIterations(in Base::CapeLong maxIteration) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds);

			Base::CapeLong GetMaxIterations() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);

			Base::CapeLong DoNIteration(in Base::CapeLong nbIterations) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds, Common::Error::ECapeBadInvOrder, Common::Error::ECapeSolvingError, Common::Error::ECapeOutOfResources, Common::Error::ECapeTimeOut);

		};

			

		interface ICapeNumericDAESolver : ICapeNumericSolver {

			void SetRelTolerance(in Base::CapeArrayDouble relTolValue) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds);

			Base::CapeArrayDouble GetRelTolerance() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);

			void SetAbsTolerance(in Base::CapeArrayDouble absTolValues) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds);

			Base::CapeArrayDouble GetAbsTolerance() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);

			Model::CapeArrayNumericEventInfo AdvanceToNextEvent(in Model::CapeArrayNumericEventInfo endConditions, out Base::CapeDouble timeBefore, out Base::CapeDouble timeAfter) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds, Common::Error::ECapeBadInvOrder, Common::Error::ECapeSolvingError, Common::Error::ECapeOutOfResources, Common::Error::ECapeTimeOut);

		};

		

	}; // END Solver Module

		



	

	// ---- The scope of the Numerical Smst specifications

	// Reference document: http://www.global-cape-open.org/07_CO_Sequential_Modular_Specific_Tools.zip

	module Smst {

	

		// Forward declaration of interfaces

		interface ICapeNumericGATComponent;

		interface ICapeNumericFlowsheetFactory;

		interface ICapeNumericFlowsheet;

		interface ICapeNumericProcessGraph;

		interface ICapeNumericPartitionGraph;

		interface ICapeNumericOpenPartitionGraph;

		interface ICapeNumericAnalysisFactory;

		interface ICapeNumericAnalysis;

		interface ICapeNumericSequencing;

		interface ICapeNumericTearing;

		interface ICapeNumericPartitioning;

		interface ICapeNumericSMAnalysis;



		// Interface sequence

		typedef sequence<ICapeNumericGATComponent> CapeArrayNumericGATComponent;

		typedef sequence<ICapeNumericFlowsheetFactory> CapeArrayNumericFlowsheetFactory;

		typedef sequence<ICapeNumericFlowsheet> CapeArrayNumericFlowsheet;

		typedef sequence<ICapeNumericProcessGraph> CapeArrayNumericProcessGraph;

		typedef sequence<ICapeNumericPartitionGraph> CapeArrayNumericPartitionGraph;

		typedef sequence<ICapeNumericOpenPartitionGraph> CapeArrayNumericOpenPartitionGraph;

		typedef sequence<ICapeNumericAnalysisFactory> CapeArrayNumericAnalysisFactory;

		typedef sequence<ICapeNumericAnalysis> CapeArrayNumericAnalysis;

		typedef sequence<ICapeNumericSequencing> CapeArrayNumericSequencing;

		typedef sequence<ICapeNumericTearing> CapeArrayNumericTearing;

		typedef sequence<ICapeNumericPartitioning> CapeArrayNumericPartitioning;

		typedef sequence<ICapeNumericSMAnalysis> CapeArrayNumericSMAnalysis;

		

		enum CapeFlowsheetType{

			PROCESS_GRAPH,

			PARTITION_GRAPH,

			OPEN_PARTITION_GRAPH

		};

		enum CapeNumericStream {

			FEED,

			PRODUCT,

			PROCESS

		};

		enum CapeAnalysisType {

			SM_ANALYSIS,

			PARTITIONING,

			TEARING,

			SEQUENCING

		};

		enum CapeConsistencyCode{

			CONSISTENCY_YES,

			CONSISTENCY_NO,

			CONSISTENCY_MAYBE

		};

		enum CapeConvergenceCode{

			CONVERGENCE_YES,

			CONVERGENCE_NO,

			CONVERGENCE_MAYBE

		};



		typedef sequence<CapeFlowsheetType> CapeArrayFlowsheetType;

		typedef sequence<CapeNumericStream> CapeArrayNumericStream;

		typedef sequence<CapeAnalysisType> CapeArrayNumericType;

		typedef sequence<CapeConsistencyCode> CapeArrayConsistencyCode;

		typedef sequence<CapeConvergenceCode> CapeArrayConvergenceCode;



		interface ICapeNumericGATComponent : Common::Identification::ICapeIdentification, Common::Parameter::ICapeParameter {

			ICapeNumericFlowsheetFactory CreateFlowsheetFactory(in Base::CapeString name) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeLicenceError, Common::Error::ECapeBadCOParameter);

			ICapeNumericAnalysisFactory CreateAnalysisFactory(in Base::CapeString name) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeLicenceError, Common::Error::ECapeBadCOParameter);

			void Shutdown() raises (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl);

		};

		

		interface ICapeNumericFlowsheetFactory : Common::Parameter::ICapeParameter {

			ICapeNumericFlowsheet CreateFlowsheet(in CapeFlowsheetType type, in Base::CapeString name) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeLicenceError, Common::Error::ECapeBadCOParameter);

			Base::CapeString GetName() raises (Common::Error::ECapeUnknown);

			Base::CapeBoolean Destroy() raises (Common::Error::ECapeUnknown);

		};



		interface ICapeNumericFlowsheet : Common::Parameter::ICapeParameter {

			Base::CapeString GetName() raises (Common::Error::ECapeUnknown);

			Base::CapeLong GetStreamCount() raises (Common::Error::ECapeUnknown);

			Base::CapeLong GetUnitCount() raises (Common::Error::ECapeUnknown);

			Base::CapeLong GetMaximumUnitCount() raises (Common::Error::ECapeUnknown);

			Base::CapeLong GetMaximumStreamCount() raises (Common::Error::ECapeUnknown);

			Base::CapeBoolean Destroy() raises (Common::Error::ECapeUnknown);

		};

		

		interface ICapeNumericProcessGraph : ICapeNumericFlowsheet {

			void AddStream(in Base::CapeLong streamId, in Base::CapeLong iunitId, in Base::CapeLong funitId) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeLimitedImpl);

			void AddStreamWeight(in Base::CapeLong streamId, in Base::CapeDouble weight) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder);

			void AddStreamType(in Base::CapeLong streamId, in CapeNumericStream type) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder);

			void AddTornProperty(in Base::CapeLong streamId, in Base::CapeBoolean toBeTorn) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder);

			void AddNotTornProperty(in Base::CapeLong streamId, in Base::CapeBoolean notToBeTorn) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder);

			void RemoveStream(in Base::CapeLong streamId) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder);

			Base::CapeArrayLong GetSetOfStream() raises (Common::Error::ECapeUnknown);

			Base::CapeArrayLong GetSetOfUnit() raises (Common::Error::ECapeUnknown);

			void GetStreamConnection(in Base::CapeLong streamId, out Base::CapeLong iunitId, out Base::CapeLong funitId) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder);

			Base::CapeDouble GetStreamWeight(in Base::CapeLong streamId) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder);

			CapeNumericStream GetStreamType(in Base::CapeLong streamId) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder);

			Base::CapeBoolean GetTornProperty(in Base::CapeLong streamId) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder);

			Base::CapeBoolean GetNotTornProperty(in Base::CapeLong streamId) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder);

		};

		

		interface ICapeNumericPartitionGraph : ICapeNumericProcessGraph {

			void SetInitialProcessGraph(in ICapeNumericProcessGraph parent) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);

			ICapeNumericProcessGraph GetInitialProcessGraph() raises (Common::Error::ECapeUnknown);

		};

		

		interface ICapeNumericOpenPartitionGraph : ICapeNumericPartitionGraph {

		};

		

		interface ICapeNumericAnalysisFactory : Common::Parameter::ICapeParameter {

			ICapeNumericAnalysis CreateNumericAnalysis(in CapeAnalysisType type, in Base::CapeString name) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeLicenceError, Common::Error::ECapeBadCOParameter);

			Base::CapeBoolean Destroy() raises (Common::Error::ECapeUnknown);

			Base::CapeString GetName() raises (Common::Error::ECapeUnknown);

			Base::CapeBoolean SMAnalysisImplementation() raises (Common::Error::ECapeUnknown);

			Base::CapeBoolean PartitioningImplementation() raises (Common::Error::ECapeUnknown);

			Base::CapeBoolean TearingImplementation() raises (Common::Error::ECapeUnknown);

			Base::CapeBoolean SequencingImplementation() raises (Common::Error::ECapeUnknown);

		};

		

		interface ICapeNumericAnalysis : Common::Parameter::ICapeParameter{

			Base::CapeLong GetMaximumUnitCount() raises (Common::Error::ECapeUnknown);

			Base::CapeLong GetMaximumStreamCount() raises (Common::Error::ECapeUnknown);

			CapeConvergenceCode Perform(in ICapeNumericFlowsheet flowsheet) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeLicenceError, Common::Error::ECapeBadCOParameter, Common::Error::ECapeNoImpl, Common::Error::ECapeLimitedImpl, Common::Error::ECapeSolvingError, Common::Error::ECapeOutOfResources);

			Base::CapeString GetName() raises (Common::Error::ECapeUnknown);

			CapeConsistencyCode CheckFlowsheetConsistency(in ICapeNumericFlowsheet flowsheet) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadCOParameter, Common::Error::ECapeNoImpl, Common::Error::ECapeLimitedImpl, Common::Error::ECapeSolvingError, Common::Error::ECapeOutOfResources);

			Base::CapeBoolean Destroy() raises (Common::Error::ECapeUnknown);

		};

		

		interface ICapeNumericSequencing : ICapeNumericAnalysis {

			Base::CapeArrayLong GetUnits() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);

		};

		

		interface ICapeNumericTearing : ICapeNumericAnalysis {

			Base::CapeArrayLong GetTornStreams() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);

			ICapeNumericOpenPartitionGraph CreateAndCompleteOpenPartitionGraph(in Base::CapeString name, in ICapeNumericFlowsheetFactory fact) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadCOParameter, Common::Error::ECapeNoImpl, Common::Error::ECapeLimitedImpl, Common::Error::ECapeSolvingError);

		};

				

		interface ICapeNumericPartitioning : ICapeNumericAnalysis {

			Base::CapeLong GetPartitionCount() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);

			Base::CapeArrayLong GetUnitsInPartition(in Base::CapeLong partitionNb) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder);

			ICapeNumericPartitionGraph CreateAndCompletePartitionGraph(in Base::CapeLong partitionNb, in Base::CapeString name, in ICapeNumericFlowsheetFactory fact) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadCOParameter, Common::Error::ECapeNoImpl, Common::Error::ECapeLimitedImpl, Common::Error::ECapeSolvingError);

			void SetExternalSystemId(in Base::CapeLong unitId) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);

			Base::CapeLong GetExternalSystemId() raises (Common::Error::ECapeUnknown);

		};



		interface ICapeNumericSMAnalysis : ICapeNumericAnalysis {

			Base::CapeLong GetPartitionCount() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);

			Base::CapeArrayLong GetUnitsInPartition(in Base::CapeLong partitionNb) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder);

			Base::CapeArrayLong GetTornStreamsInPartition(in Base::CapeLong partitionNb) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder);

		};

		

	}; // END Smst Module

	



}; // END Numr Module





// ---- The scope of the Unit Operations specification

// Reference document: http://www.global-cape-open.org/05_CO_Unit_Operations.pdf

module Unit {



	// Forward declaration of interfaces

	interface ICapeUnitManager;

	interface ICapeUnit;

	interface ICapeUnitReport;

	interface ICapeUnitCollection;

	interface ICapeUnitPort;



	// Interface sequence

	typedef sequence<ICapeUnitManager> CapeArrayUnitManager;

	typedef sequence<ICapeUnit> CapeArrayUnit;

	typedef sequence<ICapeUnitReport> CapeArrayUnitReport;

	typedef sequence<ICapeUnitCollection> CapeArrayUnitCollection;

	typedef sequence<ICapeUnitPort> CapeArrayUnitPort;



	enum CapePortType{

		CAPE_MATERIAL,

		CAPE_ENERGY,

		CAPE_INFORMATION,

		CAPE_ANY

	};

	enum CapePortDirection{

		CAPE_INLET,

		CAPE_OUTLET,

		CAPE_INLET_OUTLET

	};



	typedef sequence<CapePortType> CapeArrayPortType;

	typedef sequence<CapePortDirection> CapeArrayPortDirection;



	interface ICapeUnitManager : Common::Identification::ICapeIdentification {

		ICapeUnit CreateUnit() raises (Common::Error::ECapeUnknown, Common::Error::ECapeOutOfResources);

		void Shutdown() raises (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl);

	};

	

	interface ICapeUnit : Common::Identification::ICapeIdentification {

		void Initialize () raises (Common::Error::ECapeUnknown, Common::Error::ECapeLicenceError, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeOutOfResources);

		void Terminate () raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);

		void Calculate () raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfResources, Common::Error::ECapeTimeOut, Common::Error::ECapeSolvingError, Common::Error::ECapeLicenceError);

		ICapeUnitCollection GetPorts() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeBadInvOrder);

		ICapeUnitCollection GetParameters() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeBadInvOrder, Common::Error::ECapeBadCOParameter);

		Base::CapeBoolean Validate(out Base::CapeString message) raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadCOParameter, Common::Error::ECapeBadInvOrder);

		Common::CapeValidationStatus GetValStatus() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);

		ICapeUnitReport GetReportObject () raises (Common::Error::ECapeUnknown);

		void Save(in Base::CapeString storage) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapePersistenceNotFound, Common::Error::ECapeIllegalAccess, Common::Error::ECapeNoImpl);

		void Restore(in Base::CapeString storage) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapePersistenceNotFound, Common::Error::ECapeIllegalAccess, Common::Error::ECapeNoImpl);

		Base::CapeBoolean Destroy() raises (Common::Error::ECapeUnknown);



	};

	

	interface ICapeUnitReport : Common::Identification::ICapeIdentification {

		Base::CapeArrayString GetReports () raises (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl);

		Base::CapeString GetSelectedReport() raises (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl);

		void SetSelectedReport(in Base::CapeString report) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeNoImpl);

		Base::CapeString ProduceReport () raises (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl);

	};

	

	interface ICapeUnitCollection : Common::Identification::ICapeIdentification {

		Base::CapeLong Count() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);

		Base::CapeInterface ItemByIndex(in Base::CapeLong index) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeOutOfBounds);

		Base::CapeInterface ItemByName(in Base::CapeString name) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeOutOfBounds);

	};

	

	interface ICapeUnitPort : Common::Identification::ICapeIdentification {

		CapePortType GetType() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);

		CapePortDirection GetDirection() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);

		Thrm::Cose::ICapeThermoMaterialObject GetConnectedObject() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);

		void Connect(in Thrm::Cose::ICapeThermoMaterialObject matObj) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);

		void Disconnect() raises (Common::Error::ECapeUnknown);

	};

	

}; // END Unit module 







}; // END CapeOpen module