/* IMPORTANT NOTICE
(c) The CAPE-OPEN Laboratory Network, 2002.
All rights are reserved unless specifically stated otherwise

Visit the web site 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)
*/

/* IMPLEMENTATION SPECIFICATION VERSION
Type = CAPE-OPEN IDL library for CORBA platform
Version number = 1.0.0
Delivering date = August 2003
*/

/* COMPATIBILITY VERSION
CORBA Specification version number with which this file is compliant = 2.0 and upper
Visit the web site of the CORBA standard at www.omg.org
*/

// This file was developed/modified by JEAN-PIERRE BELAUD for CO-LaN organisation - August 2003



// ============================================================================
// IMPLEMENTATION SPECIFICATION FOR CORBA PLATFORM
// ============================================================================



// ---- The global scope is defined by a CAPEOPEN100 Module -------------------
module CAPEOPEN100 { 



	// ---- The scope of the common interfaces --------------------------------
	module Common{


		// ---- The scope of the types and undefined values -------------------
		// Reference document: Types and undefined values
		module Types{

			// 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;
		
			// Definition of CapeValidationStatus type
			typedef enum eCapeValidationStatus{
				CAPE_NOT_VALIDATED,
				CAPE_INVALID,
				CAPE_VALID
			} CapeValidationStatus;

			typedef sequence<CapeValidationStatus> CapeArrayValidationStatus;	
		
			// Definition of Undefined values
			const	CapeLong	CapeLongUNDEFINED	=-2^31;
			const	CapeShort	CapeShortUNDEFINED	=-2^15;

			const	CapeDouble	CapeDoubleUNDEFINED	=-4.9E-324;
			const	CapeFloat	CapeFloatUNDEFINED	=-1.4E-45;

			const	CapeChar	CapeCharUNDEFINED	='\0';
			const	CapeString	CapeStringUNDEFINED	="";
			const	CapeDate	CapeDateUNDEFINED	="";
			const	CapeURL		CapeURLUNDEFINED	="";
			
			#define CapeArrayLongUNDEFINED		NULL;
			#define CapeArrayShortUNDEFINED		NULL;

			#define CapeArrayDoubleUNDEFINED	NULL;
			#define CapeArrayFloatUNDEFINED		NULL;

			#define CapeArrayCharUNDEFINED		NULL;
			#define CapeArrayStringUNDEFINED	NULL;
			#define CapeArrayDateUNDEFINED		NULL;
			#define CapeArrayURLUNDEFINED		NULL;	

		
		}; // END Types module ------------------------------------------------


		// ---- The scope of the error interface ------------------------------
		// Reference document: Error Common Interface
		module Error{
		
			exception ECapeUnknown{
				Types::CapeLong code;
				Types::CapeString description;
				Types::CapeString scope;
				Types::CapeString interfaceName;
				Types::CapeString operation;
				Types::CapeURL moreInfo;
			};
				
			/* Data Package */		
			exception ECapeData{
				Types::CapeLong code;
				Types::CapeString description;
				Types::CapeString scope;
				Types::CapeString interfaceName;
				Types::CapeString operation;
				Types::CapeURL moreInfo;
			};
				
			/* Data Package */	
			exception ECapeLicenceError{
				Types::CapeLong code;
				Types::CapeString description;
				Types::CapeString scope;
				Types::CapeString interfaceName;
				Types::CapeString operation;
				Types::CapeURL moreInfo;
			};
			
			/* Data Package */
			exception ECapeBadCOParameter{
				Types::CapeLong code;
				Types::CapeString description;
				Types::CapeString scope;
				Types::CapeString interfaceName;
				Types::CapeString operation;
				Types::CapeURL moreInfo;
				Types::CapeString parameterName;
	//			Common::Parameter::ICapeParameter ICapeParameter par;  //Compilation Error with some ORB compiler !!!
			};
				
			/* Data Package */	
			exception ECapeBadArgument{
				Types::CapeLong code;
				Types::CapeString description;
				Types::CapeString scope;
				Types::CapeString interfaceName;
				Types::CapeString operation;
				Types::CapeURL moreInfo;
				Types::CapeShort position;
			};
		
			/* Data Package */
			exception ECapeInvalidArgument{
				Types::CapeLong code;
				Types::CapeString description;
				Types::CapeString scope;
				Types::CapeString interfaceName;
				Types::CapeString operation;
				Types::CapeURL moreInfo;
				Types::CapeShort position;
			};			
			
			/* Data Package */
			exception ECapeOutOfBounds{
				Types::CapeLong code;
				Types::CapeString description;
				Types::CapeString scope;
				Types::CapeString interfaceName;
				Types::CapeString operation;
				Types::CapeURL moreInfo;
				Types::CapeShort position;
				Types::CapeDouble lowerBound;
				Types::CapeDouble upperBound;
				Types::CapeDouble value;
				Types::CapeString type;
			};			
			
			/* Implementation Package */	
			exception ECapeNoImpl{
				Types::CapeLong code;
				Types::CapeString description;
				Types::CapeString scope;
				Types::CapeString interfaceName;
				Types::CapeString operation;
				Types::CapeURL moreInfo;
			};
			
			/* Implementation Package */
			exception ECapeImplementation{
				Types::CapeLong code;
				Types::CapeString description;
				Types::CapeString scope;
				Types::CapeString interfaceName;
				Types::CapeString operation;
				Types::CapeURL moreInfo;
			};
		
			/* Implementation Package */	
			exception ECapeLimitedImpl{
				Types::CapeLong code;
				Types::CapeString description;
				Types::CapeString scope;
				Types::CapeString interfaceName;
				Types::CapeString operation;
				Types::CapeURL moreInfo;
			};
				
			/* Computation Package */
			exception ECapeOutOfResources{
				Types::CapeLong code;
				Types::CapeString description;
				Types::CapeString scope;
				Types::CapeString interfaceName;
				Types::CapeString operation;
				Types::CapeURL moreInfo;
				Types::CapeDouble lowerBound;
				Types::CapeDouble upperBound;
				Types::CapeDouble value;
				Types::CapeString type;
			};
		
			/* Computation Package */
			exception ECapeNoMemory{
				Types::CapeLong code;
				Types::CapeString description;
				Types::CapeString scope;
				Types::CapeString interfaceName;
				Types::CapeString operation;
				Types::CapeURL moreInfo;
				Types::CapeDouble lowerBound;
				Types::CapeDouble upperBound;
				Types::CapeDouble value;
				Types::CapeString type;
			};
				
			/* Computation Package */	
			exception ECapeTimeOut{
				Types::CapeLong code;
				Types::CapeString description;
				Types::CapeString scope;
				Types::CapeString interfaceName;
				Types::CapeString operation;
				Types::CapeURL moreInfo;
				Types::CapeDouble lowerBound;
				Types::CapeDouble upperBound;
				Types::CapeDouble value;
				Types::CapeString type;
			};
				
			/* Computation Package */	
			exception ECapeFailedInitialisation{
				Types::CapeLong code;
				Types::CapeString description;
				Types::CapeString scope;
				Types::CapeString interfaceName;
				Types::CapeString operation;
				Types::CapeURL moreInfo;
			};
		
			/* Computation Package */
			exception ECapeSolvingError{
				Types::CapeLong code;
				Types::CapeString description;
				Types::CapeString scope;
				Types::CapeString interfaceName;
				Types::CapeString operation;
				Types::CapeURL moreInfo;
			};
				
			/* Computation Package */
			exception ECapeBadInvOrder{
				Types::CapeLong code;
				Types::CapeString description;
				Types::CapeString scope;
				Types::CapeString interfaceName;
				Types::CapeString operation;
				Types::CapeURL moreInfo;
				Types::CapeString requestedOperation;
			};
			
			/* Computation Package */
			exception ECapeInvalidOperation{
				Types::CapeLong code;
				Types::CapeString description;
				Types::CapeString scope;
				Types::CapeString interfaceName;
				Types::CapeString operation;
				Types::CapeURL moreInfo;
			};
				
			/* Computation Package */
			exception ECapeComputation{
				Types::CapeLong code;
				Types::CapeString description;
				Types::CapeString scope;
				Types::CapeString interfaceName;
				Types::CapeString operation;
				Types::CapeURL moreInfo;
			};
				
			/* Persistence Package */
			exception ECapeIllegalAccess{
				Types::CapeLong code;
				Types::CapeString description;
				Types::CapeString scope;
				Types::CapeString interfaceName;
				Types::CapeString operation;
				Types::CapeURL moreInfo;
			};
			
			/* Persistence Package */	
			exception ECapePersistence{
				Types::CapeLong code;
				Types::CapeString description;
				Types::CapeString scope;
				Types::CapeString interfaceName;
				Types::CapeString operation;
				Types::CapeURL moreInfo;
			};
				
			/* Persistence Package */
			exception ECapePersistenceNotFound{
				Types::CapeLong code;
				Types::CapeString description;
				Types::CapeString scope;
				Types::CapeString interfaceName;
				Types::CapeString operation;
				Types::CapeURL moreInfo;
				Types::CapeString itemName;
			};
		
			/* Persistence Package */
			exception ECapePersistenceOverflow{
				Types::CapeLong code;
				Types::CapeString description;
				Types::CapeString scope;
				Types::CapeString interfaceName;
				Types::CapeString operation;
				Types::CapeURL moreInfo;
				Types::CapeDouble lowerBound;
				Types::CapeDouble upperBound;
				Types::CapeDouble value;
				Types::CapeString type;
			};
				
			/* Persistence Package */		
			exception ECapePersistenceSystemError{
				Types::CapeLong code;
				Types::CapeString description;
				Types::CapeString scope;
				Types::CapeString interfaceName;
				Types::CapeString operation;
				Types::CapeURL moreInfo;
			};

		}; // END Error module ------------------------------------------------


		// ---- The scope of the identification interface ---------------------
		// Reference document: Identification Common Interface
		module Identification{
		
			// Forward declaration of interfaces
			interface ICapeIdentification;

			// Interface sequence
			typedef sequence<ICapeIdentification> CapeArrayIdentification;

			interface ICapeIdentification{
				Types::CapeString GetComponentName() raises (Error::ECapeUnknown);
				void SetComponentName(in Types::CapeString name) raises (Error::ECapeUnknown, Error::ECapeInvalidArgument);
				Types::CapeString GetComponentDescription() raises (Error::ECapeUnknown);
				void SetComponentDescription(in Types::CapeString desc) raises (Error::ECapeUnknown, Error::ECapeInvalidArgument);
			};

		}; // END Identification module ---------------------------------------


		// ---- The scope of the collection interface ------------------------- 
		// Reference document: Collection Common Interface
		module Collection{
		
			// Forward declaration of interfaces
			interface ICapeCollection;

			// Interface sequence
			typedef sequence<ICapeCollection> CapeArrayCollection;

			interface ICapeCollection : Identification::ICapeIdentification{
				Types::CapeLong Count() raises (Error::ECapeUnknown, Error::ECapeFailedInitialisation);
				Types::CapeInterface ItemByIndex(in Types::CapeLong index) raises (Error::ECapeUnknown, Error::ECapeInvalidArgument, Error::ECapeFailedInitialisation, Error::ECapeOutOfBounds);
				Types::CapeInterface ItemByName(in Types::CapeString name) raises (Error::ECapeUnknown, Error::ECapeInvalidArgument, Error::ECapeFailedInitialisation, Error::ECapeOutOfBounds);
			};

		}; // END Collection module -------------------------------------------


		// ---- The scope of the utilities interface --------------------------
		// Reference document: Utilities Common Interface
		module Utilities{
		
			// Forward declaration of interfaces
			interface ICapeUtilities;

			// Interface sequence
			typedef sequence<ICapeUtilities> CapeArrayUtilities;

			interface ICapeUtilities{
				Collection::ICapeCollection GetParameters() raises (Error::ECapeUnknown, Error::ECapeFailedInitialisation, Error::ECapeNoImpl);
				void SetSimulationContext(in Types::CapeInterface simContextManager) raises (Error::ECapeUnknown, Error::ECapeInvalidArgument, Error::ECapeFailedInitialisation, Error::ECapeNoImpl);
				void Initialize() raises (Error::ECapeUnknown, Error::ECapeFailedInitialisation, Error::ECapeOutOfResources, Error::ECapeLicenceError, Error::ECapeBadInvOrder);
				void Terminate() raises (Error::ECapeUnknown, Error::ECapeOutOfResources, Error::ECapeBadInvOrder);
			};

		}; // END Utilities module --------------------------------------------


		// ---- The scope of the parameter interface --------------------------
		// Reference document: Parameter Common Interface
		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
			typedef enum eCapeParamType{
				CAPE_REAL,
				CAPE_INT,
				CAPE_OPTION,
				CAPE_BOOLEAN,
				CAPE_ARRAY
			} CapeParamType;

			typedef enum eCapeParamMode{
				CAPE_INPUT,
				CAPE_OUTPUT,
				CAPE_INPUT_OUTPUT
			} CapeParamMode;

			typedef sequence<CapeParamType> CapeArrayParamType;
			typedef sequence<CapeParamMode> CapeArrayParamMode;

			interface ICapeParameter: Identification::ICapeIdentification{
				Types::CapeVariant GetValue() raises (Error::ECapeUnknown);
				void SetValue(in Types::CapeVariant value) raises (Error::ECapeUnknown, Error::ECapeInvalidArgument);
				Common::Types::CapeValidationStatus ValStatus() raises (Error::ECapeUnknown);
				CapeParamMode GetMode() raises (Error::ECapeUnknown);
				void SetMode(in CapeParamMode mode) raises (Error::ECapeUnknown, Error::ECapeInvalidArgument);
				ICapeParameterSpec Specification() raises (Error::ECapeUnknown);
				Types::CapeBoolean Validate(out Types::CapeString message) raises (Error::ECapeUnknown);
				void Reset() raises (Error::ECapeUnknown);
			};

			interface ICapeParameterSpec: Identification::ICapeIdentification{
				CapeParamType Type() raises (Error::ECapeUnknown);
				Types::CapeVariant Dimensionality() raises (Error::ECapeUnknown);
			};

			interface ICapeRealParameterSpec: ICapeParameterSpec{
				Types::CapeDouble DefaultValue() raises (Error::ECapeUnknown);
				Types::CapeDouble LowerBound() raises (Error::ECapeUnknown);
				Types::CapeDouble UpperBound() raises (Error::ECapeUnknown);
				Types::CapeBoolean Validate(in Types::CapeDouble value, out Types::CapeString message) raises (Error::ECapeUnknown, Error::ECapeInvalidArgument);
			};
			
			interface ICapeIntegerParameterSpec: ICapeParameterSpec{
				Types::CapeLong DefaultValue() raises (Error::ECapeUnknown);
				Types::CapeLong LowerBound() raises (Error::ECapeUnknown);
				Types::CapeLong UpperBound() raises (Error::ECapeUnknown);
				Types::CapeBoolean Validate(in Types::CapeLong value, out Types::CapeString message) raises (Error::ECapeUnknown, Error::ECapeInvalidArgument);
			};

			interface ICapeOptionParameterSpec: ICapeParameterSpec{
				Types::CapeString DefaultValue() raises (Error::ECapeUnknown);
				Types::CapeArrayString OptionList() raises (Error::ECapeUnknown);
				Types::CapeBoolean RestrictedToList() raises (Error::ECapeUnknown);
				Types::CapeBoolean Validate(in Types::CapeString value, out Types::CapeString message) raises (Error::ECapeUnknown, Error::ECapeInvalidArgument);
			};

			interface ICapeBooleanParameterSpec: ICapeParameterSpec{
				Types::CapeBoolean DefaultValue() raises (Error::ECapeUnknown);
				Types::CapeBoolean Validate(in Types::CapeBoolean value, out Types::CapeString message) raises (Error::ECapeUnknown, Error::ECapeInvalidArgument);
			};

			interface ICapeArrayParameterSpec: ICapeParameterSpec{
				Types::CapeLong NumDimensions() raises (Error::ECapeUnknown);
				Types::CapeArrayLong Size() raises (Error::ECapeUnknown);
				CapeArrayParameterSpec ItemsSpecification() raises (Error::ECapeUnknown);
				Types::CapeArrayBoolean Validate(in Types::CapeVariant value, out Types::CapeArrayString message) raises (Error::ECapeUnknown, Error::ECapeInvalidArgument);
			};

		}; // END Parameter module --------------------------------------------


		// ---- The scope of the persistence interface ------------------------
		// Reference document: Persistence Common Interface
		
		// If you do not attend to implement the Persistence interface, you can put in comments the #include statement and the module Persistence
		
		// this resource can be found at http://www.omg.org/technology/documents/formal/property_service.htm
	//	#include "CosPropertyService.idl"

		module Persistence{

			interface ICapePropertySetPersist{
				Types::CapeBoolean InitProperties() raises (Error::ECapePersistence);
	//			void LoadProperties(in CosPropertyService::PropertySet prop_set) raises (Error::ECapePersistence);
	//			void SaveProperties(inout CosPropertyService::PropertySet prop_set) raises (Error::ECapePersistence);
			};
		
		}; // END Persistence module ------------------------------------------


	}; // END Common module ---------------------------------------------------



	// ---- The scope of the COSE interfaces ----------------------------------

	module Cose{


		// ---- The scope of simulation context interface ---------------------
		// Reference document: Simulation context interface
		module SContext{

			// Forward declaration of interfaces
			interface ICapeSimulationContext;
			interface ICapeSimulationContextManager;
			interface ICapeDiagnostic;
			interface ICapeMaterialTemplateSystem;
			interface ICapeCOSEUtilities;

			// Interface sequence
			typedef sequence<ICapeSimulationContext> CapeArraySimulationContext;
			typedef sequence<ICapeSimulationContextManager> CapeArraySimulationContextManager;
			typedef sequence<ICapeDiagnostic> CapeArrayDiagnostic;
			typedef sequence<ICapeMaterialTemplateSystem> CapeArrayMaterialTemplateSystem;
			typedef sequence<ICapeCOSEUtilities> CapeArrayCOSEUtilities;

			typedef enum eCapeSimulationContextType{
				CAPE_DIAGNOSTIC,
				CAPE_MTS,
				CAPE_UTILITIES
			} CapeSimulationContextType;
			typedef sequence<CapeSimulationContextType> CapeArraySimulationContextType;

			interface ICapeSimulationContextManager{
				ICapeSimulationContext GetSimulationContext(in CapeSimulationContextType type) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeNoImpl);
			};
			
			interface ICapeSimulationContext{
			};

			interface ICapeDiagnostic: ICapeSimulationContext{
				void PopUpMessage(in Common::Types::CapeString message) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
				void LogMessage(in Common::Types::CapeString message) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
			};

			interface ICapeMaterialTemplateSystem: ICapeSimulationContext{
				Common::Types::CapeArrayString MaterialTemplates() raises (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl);
				Common::Types::CapeInterface CreateMaterialTemplate(in Common::Types::CapeString materialTemplateName) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeNoImpl);
			};

			interface ICapeCOSEUtilities: ICapeSimulationContext{
				Common::Types::CapeArrayString NamedValueList() raises (Common::Error::ECapeUnknown);
				Common::Types::CapeVariant NamedValue(in Common::Types::CapeString name) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
			};

		}; // END SContext module ---------------------------------------------

		
	}; // END Cose module -----------------------------------------------------
		


	// ---- The scope of the Business interfaces ------------------------------

	module Business{


	// ---- The scope of the Physical Properties interfaces -------------------

		module PhyProp{

			// ---- The scope of thermodynamic and physical properties interface
			// Reference document: Thermodynamic and physical properties
			// and Petroleum Fractions
			module Thrm{

				// ---- Cose module -------------------------------------------
				module Cose{
					
					// Forward declaration of interfaces
					interface ICapeThermoMaterialObject;
					interface ICapeThermoReliability;
					interface ICapeThermoMaterialTemplate;
					interface ICapeThermoPetroFractions;

					// Interface sequence
					typedef sequence<ICapeThermoMaterialObject> CapeArrayThermoMaterialObject;
					typedef sequence<ICapeThermoReliability> CapeArrayThermoReliability;
					typedef sequence<ICapeThermoMaterialTemplate> CapeArrayThermoMaterialTemplate;
					typedef sequence<ICapeThermoPetroFractions> CapeArrayThermoPetroFractions;
					
					interface ICapeThermoReliability {
					// contents to be filled in later
					};
					
					interface ICapeThermoMaterialObject {
						Common::Types::CapeArrayString ComponentIds() raises (Common::Error::ECapeUnknown);
						Common::Types::CapeArrayString PhaseIds() raises (Common::Error::ECapeUnknown);
						Common::Types::CapeArrayVariant GetUniversalConstant(in Common::Types::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeNoImpl);
						Common::Types::CapeArrayVariant GetComponentConstant(in Common::Types::CapeArrayString props, in Common::Types::CapeArrayString compIds) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
						void CalcProp(in Common::Types::CapeArrayString props, in Common::Types::CapeArrayString phases, in Common::Types::CapeString calcType) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeSolvingError, Common::Error::ECapeOutOfBounds, Common::Error::ECapeLicenceError);
						Common::Types::CapeArrayDouble GetProp(in Common::Types::CapeString property, in Common::Types::CapeString phase, in Common::Types::CapeArrayString compIds, in Common::Types::CapeString calcType, in Common::Types::CapeString basis) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
						void SetProp(in Common::Types::CapeString property, in Common::Types::CapeString phase, in Common::Types::CapeArrayString compIds, in Common::Types::CapeString calcType, in Common::Types::CapeString basis, in Common::Types::CapeArrayDouble values) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
						void CalcEquilibrium(in Common::Types::CapeString flashType, in Common::Types::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder, Common::Error::ECapeSolvingError, Common::Error::ECapeOutOfBounds, Common::Error::ECapeLicenceError);
						void SetIndependentVar(in Common::Types::CapeArrayString indVars, in Common::Types::CapeArrayDouble values) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
						Common::Types::CapeArrayDouble GetIndependentVar(in Common::Types::CapeArrayString indVars) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument); 			
						Common::Types::CapeArrayBoolean PropCheck(in Common::Types::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
						Common::Types::CapeArrayString AvailableProps() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadCOParameter);			
						void RemoveResults(in Common::Types::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
						ICapeThermoMaterialObject CreateMaterialObject() raises (Common::Error::ECapeUnknown, Common::Error::ECapeOutOfResources, Common::Error::ECapeLicenceError);
						ICapeThermoMaterialObject Duplicate() raises (Common::Error::ECapeUnknown, Common::Error::ECapeOutOfResources, Common::Error::ECapeLicenceError);
						Common::Types::CapeArrayString GetPropList() raises (Common::Error::ECapeUnknown);
						CapeArrayThermoReliability ValidityCheck(in  Common::Types::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
						Common::Types::CapeLong GetNumComponents() raises (Common::Error::ECapeUnknown);					
					};
					
					interface ICapeThermoMaterialTemplate {
						ICapeThermoMaterialObject CreateMaterialObject() raises (Common::Error::ECapeUnknown, Common::Error::ECapeOutOfResources, Common::Error::ECapeLicenceError);
						void SetProp (in Common::Types::CapeString property, in Common::Types::CapeArrayDouble values) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
					};

					interface ICapeThermoPetroFractions : ICapeThermoMaterialObject {
						void SetPetroProp(in Common::Types::CapeString propertyID,in Common::Types::CapeArrayString compID, in Common::Types::CapeString basis, in Common::Types::CapeArrayDouble values) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
						Common::Types::CapeArrayDouble GetPetroProp(in Common::Types::CapeString propertyID, in Common::Types::CapeArrayString compID, in Common::Types::CapeString basis) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);	
						void Characterize() raises (Common::Error::ECapeUnknown, Common::Error::ECapeSolvingError, Common::Error::ECapeComputation, Common::Error::ECapeLicenceError, Common::Error::ECapeOutOfResources);
						void RemovePetroProp(in Common::Types::CapeString propertyID, in Common::Types::CapeArrayString compID) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
						void DefineFromPetroFractions(in Common::Types::CapeInterface originFractionsSet) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
					};
	
				}; // END Cose module -----------------------------------------
				
				// ---- ThermoSystem module -----------------------------------
				module ThermoSystem{
					
					// Forward declaration of interface
					interface ICapeThermoPropertyPackage;
					interface ICapeThermoSystem;
					
					// Interface sequence
					typedef sequence<ICapeThermoPropertyPackage> CapeArrayThermoPropertyPackage;
					typedef sequence<ICapeThermoSystem> CapeArrayThermoSystem;

					// Factory of statefull transient objects
					interface ICapeThermoSystem : Common::Identification::ICapeIdentification {
						Common::Types::CapeArrayString GetPropertyPackages() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeNoImpl);
						ICapeThermoPropertyPackage ResolvePropertyPackage(in Common::Types::CapeString propPkg) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeFailedInitialisation);
					};
					
					// PMC primary object interface
					interface ICapeThermoPropertyPackage : Common::Identification::ICapeIdentification, Common::Persistence::ICapePropertySetPersist, Common::Utilities::ICapeUtilities {
						Common::Types::CapeArrayString GetPhaseList() raises (Common::Error::ECapeUnknown);
						void GetComponentList  (out Common::Types::CapeArrayString compIds, out Common::Types::CapeArrayString formulae, out Common::Types::CapeArrayString name, out Common::Types::CapeArrayDouble boilTemps, out Common::Types::CapeArrayDouble molwt, out Common::Types::CapeArrayString casno) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
						Common::Types::CapeArrayVariant GetUniversalConstant(in Cose::ICapeThermoMaterialObject materialObject, in Common::Types::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
						Common::Types::CapeArrayVariant GetComponentConstant(in Cose::ICapeThermoMaterialObject materialObject, in Common::Types::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
						void CalcProp(in Cose::ICapeThermoMaterialObject mobject, in Common::Types::CapeArrayString props, in Common::Types::CapeArrayString phases, in Common::Types::CapeString CalcType) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeSolvingError, Common::Error::ECapeOutOfBounds, Common::Error::ECapeLicenceError);
						void CalcEquilibrium(in Cose::ICapeThermoMaterialObject materialObject, in Common::Types::CapeString flashType, in Common::Types::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeSolvingError, Common::Error::ECapeOutOfBounds, Common::Error::ECapeLicenceError);
						Common::Types::CapeArrayBoolean PropCheck(in Cose::ICapeThermoMaterialObject materialObject, in Common::Types::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
						Cose::CapeArrayThermoReliability ValidityCheck(in Cose::ICapeThermoMaterialObject materialObject, in  Common::Types::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
						Common::Types::CapeArrayString GetPropList() raises (Common::Error::ECapeUnknown);
					};
					
				}; // END ThermoSystem module ---------------------------------
				
				// ---- CalculationRoutine module -----------------------------
				module CalculationRoutine {
				
					// Forward declaration of interfaces
					interface ICapeThermoCalculationRoutine;
					
					// Interface sequence
					typedef sequence<ICapeThermoCalculationRoutine> CapeArrayThermoCalculationRoutine;
					
					// PMC primary object interface
					interface ICapeThermoCalculationRoutine : Common::Identification::ICapeIdentification, Common::Persistence::ICapePropertySetPersist, Common::Utilities::ICapeUtilities {
						void CalcProp(in Cose::ICapeThermoMaterialObject materialObject, in Common::Types::CapeArrayString props, in Common::Types::CapeArrayString phases, in Common::Types::CapeString calcType) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder, Common::Error::ECapeSolvingError, Common::Error::ECapeOutOfBounds);
						Common::Types::CapeArrayBoolean PropCheck(in Cose::ICapeThermoMaterialObject materialObject, in Common::Types::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);	
						void PropList(out Common::Types::CapeArrayString props, out Common::Types::CapeArrayString phases, out Common::Types::CapeArrayString calcType) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
						Cose::CapeArrayThermoReliability ValidityCheck(in Cose::ICapeThermoMaterialObject materialObject, in Common::Types::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
					};

				}; // END CalculationRoutine module ---------------------------
				
				// ---- EquilibriumServer module ------------------------------
				module EquilibriumServer {
				
					// Forward declaration of interfaces
					interface ICapeThermoEquilibriumServer;
					
					// Interface sequence
					typedef  sequence<ICapeThermoEquilibriumServer> CapeArrayThermoEquilibriumServer;
					
					// PMC primary object interface
					interface ICapeThermoEquilibriumServer : Common::Identification::ICapeIdentification, Common::Persistence::ICapePropertySetPersist, Common::Utilities::ICapeUtilities {
						void CalcEquilibrium(in Cose::ICapeThermoMaterialObject materialObject, in Common::Types::CapeString flashType, in Common::Types::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder, Common::Error::ECapeSolvingError, Common::Error::ECapeOutOfBounds);
						Common::Types::CapeArrayBoolean PropCheck(in Cose::ICapeThermoMaterialObject materialObject, in Common::Types::CapeString flashType, in Common::Types::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
						Cose::CapeArrayThermoReliability ValidityCheck(in Cose::ICapeThermoMaterialObject materialObject, in Common::Types::CapeArrayString props) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
						void PropList(out Common::Types::CapeArrayString flashType, out Common::Types::CapeArrayString props, out Common::Types::CapeArrayString phases, out Common::Types::CapeArrayString calcType) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
					};
					
				}; // END EquilibriumServer module ----------------------------


			}; // END Thrm module ---------------------------------------------


			// ---- The scope of the Reactions interfaces -------------------
			// Reference document: Chemical Reactions
            module Reactions{
		
    			typedef enum eCapeReactionType{
					CAPE_EQUILIBRIUM,
					CAPE_KINETIC
				} CapeReactionType;

				typedef enum eCapeReactionRateBasis{
					CAPE_HOMOGENEOUS,
					CAPE_HETEROGENEOUS
				} CapeReactionRateBasis;

				// Forward declaration of interface
				interface ICapeReactionsPackageManager;
				interface ICapeReactionProperties;
				interface ICapeReactionChemistry;
				interface ICapeReactionsRoutine;
			    interface ICapeKineticReactionContext;
				interface ICapeElectrolyteReactionContext;
				interface ICapeThermoContext;

				// Interface sequence
				typedef sequence<ICapeReactionsPackageManager> CapeArrayReactionsPackageManager;
				typedef sequence<ICapeReactionProperties> CapeArrayReactionProperties;
				typedef sequence<ICapeReactionChemistry> CapeArrayReactionChemistry;
				typedef sequence<ICapeReactionsRoutine> CapeArrayReactionsRoutine;
				typedef sequence<ICapeKineticReactionContext> CapeArrayKineticReactionContext;
				typedef sequence<ICapeElectrolyteReactionContext> CapeArrayElectrolyteReactionContext;
				typedef sequence<ICapeThermoContext> CapeArrayThermoContext;

				// PMC primary object interface
				interface ICapeReactionsPackageManager : Common::Identification::ICapeIdentification, Common::Persistence::ICapePropertySetPersist, Common::Utilities::ICapeUtilities {
					Common::Types::CapeArrayString GetListOfReactionsPackages() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeNoImpl);
					ICapeReactionsRoutine ResolveReactionsPackage(in Common::Types::CapeString reactionsPkg) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeFailedInitialisation);
				};

				interface ICapeElectrolyteReactionContext : Common::Identification::ICapeIdentification {
					void SetReactionObject(in ICapeReactionProperties reactionObject) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeNoImpl);
				};

				interface ICapeKineticReactionContext : Common::Identification::ICapeIdentification {
					void SetReactionObject(in ICapeReactionProperties reactionObject) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeNoImpl);
				};
	
				interface ICapeReactionProperties : Common::Identification::ICapeIdentification {
					Common::Types::CapeArrayDouble GetReactionProp(in Common::Types::CapeString property, in Common::Types::CapeString phase, in Common::Types::CapeArrayString reacIds, in Common::Types::CapeString basis) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeNoImpl);
					void SetReactionProp(in Common::Types::CapeString property, in Common::Types::CapeString phase, in Common::Types::CapeArrayString reacIds, in Common::Types::CapeString basis, in Common::Types::CapeArrayDouble propVals) raises ( Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeNoImpl);
				};
		
				interface ICapeReactionsRoutine : Common::Identification::ICapeIdentification {
					void CalcReactionProp(in Common::Types::CapeArrayString props, in Common::Types::CapeString phase, in Common::Types::CapeArrayString reacIds, in Common::Types::CapeString basis) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeNoImpl);
				};

				interface ICapeReactionChemistry : Common::Identification::ICapeIdentification {
					Common::Types::CapeLong GetNumberOfReactions() raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeNoImpl);
					Common::Types::CapeArrayString GetReactionsIds() raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeNoImpl);
					CapeReactionType GetReactionType(in Common::Types::CapeString reacID) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeNoImpl);
			        Common::Types::CapeLong GetNumberOfReactionCompounds(in Common::Types::CapeString reacID) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeNoImpl);
			        void GetReactionCompoundIds(in Common::Types::CapeString reacID,out Common::Types::CapeArrayString compIDS,out Common::Types::CapeArrayDouble compCharge,out Common::Types::CapeArrayString compCASNumber) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeNoImpl);
					Common::Types::CapeArrayDouble GetStoichiometricCoefficients(in Common::Types::CapeString reacID) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeNoImpl);
			        Common::Types::CapeString GetReactionPhase(in Common::Types::CapeString reacId) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeNoImpl);
					CapeReactionRateBasis GetReactionRateBasis(in Common::Types::CapeString reacID) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeNoImpl);
				    Common::Types::CapeString GetReactionConcBasis(in Common::Types::CapeString reacID) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeNoImpl);
					Common::Types::CapeString GetBaseReactant(in Common::Types::CapeString reacID) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeNoImpl);
					void GetPhaseCompounds(in Common::Types::CapeString reacID,out Common::Types::CapeLong compNo,out Common::Types::CapeArrayString compIds) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeNoImpl);
					Common::Collection::ICapeCollection GetReactionParameters(in Common::Types::CapeString reacId) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeNoImpl);	
				};		
		
				interface ICapeThermoContext : Common::Identification::ICapeIdentification {
					void SetMaterial(in PhyProp::Thrm::Cose::ICapeThermoMaterialObject materialObject) raises (Common::Error::ECapeInvalidArgument,Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeNoImpl);
				};

			}; // END Reactions module

			// --- The scope of the Physical Properties Data Base interfaces
			// Reference document: Physical Properties Data Base
			module Ppdb{

				#define CAPE_SpecCompoundFormula 		0
				#define CAPE_SpecCompoundName			1
				#define CAPE_SpecCompoundCasNo			2
				#define CAPE_SpecCompoundDbSpecificID	3
				#define CAPE_SpecCompoundStructure		4
				#define CAPE_SpecCompoundDescriptor	5

				#define	CAPE_SpecStructureDDB			0
				#define CAPE_SpecStructureMDL			1
				#define CAPE_SpecStructureSMILES		2

				#define CAPE_DicPropertyList			0
				#define CAPE_DicUnits					1
				#define CAPE_DicUnitsTemperature		2
				#define CAPE_DicUnitsPressure 			3
				#define CAPE_DicModels					4
				#define CAPE_DicPhaseEq					5
				#define CAPE_DicPhases					6
				#define CAPE_DicTableInformation		7
				#define CAPE_DicPropInformation			8
				#define CAPE_DicSetInformation			9
				#define CAPE_DicCompoundDescriptors		10

				typedef struct sCapePpdbCompound{
					Common::Types::CapeString name;
					Common::Types::CapeString sumFormula;
					Common::Types::CapeString casNo;
					Common::Types::CapeString dbSpecificId;
					Common::Types::CapeString internalName;
					Common::Types::CapeArrayString synonyms;
					Common::Types::CapeArrayString descriptors;
				} CapePpdbCompound;
					
				typedef sequence <CapePpdbCompound> CapeArrayPpdbCompound;

				// Forward declaration of interface
				interface ICapePpdbRegister;
				interface ICapePpdb;
				interface ICapePpdbTables;
				interface ICapePpdbModels;
			    interface ICapePpdbAbstractModel;

				// Interface sequence
				typedef sequence<ICapePpdbRegister> CapeArrayPpdbRegister;
				typedef sequence<ICapePpdb> CapeArrayPpdb;
				typedef sequence<ICapePpdbTables> CapeArrayPpdbTables;
				typedef sequence<ICapePpdbModels> CapeArrayPpdbModels;
				typedef sequence<ICapePpdbAbstractModel> CapeArrayPpdbAbstractModel;

				// PMC primary object interface
				interface ICapePpdbRegister : Common::Identification::ICapeIdentification, Common::Persistence::ICapePropertySetPersist, Common::Utilities::ICapeUtilities {
					void GetInfo(out Common::Types::CapeArrayString ppdbNames, out Common::Types::CapeArrayString ppdbInformation)raises (Common::Error::ECapePersistenceNotFound, Common::Error::ECapeUnknown, Common::Error::ECapeNoMemory);
					ICapePpdb CreatePpdbObject() raises (Common::Error::ECapeUnknown, Common::Error::ECapeNoMemory);
				};

				interface ICapePpdb : Common::Identification::ICapeIdentification {
					void Open(in Common::Types::CapeString ppdbName, in Common::Types::CapeString loginInformation, out Common::Types::CapeArrayBoolean isImplemented)raises (Common::Error::ECapePersistenceNotFound, Common::Error::ECapeUnknown, Common::Error::ECapeNoMemory, Common::Error::ECapeData, Common::Error::ECapeBadArgument);
					void Close() raises (Common::Error::ECapeUnknown);
					void ExpandDictionary(in Common::Types::CapeShort specType, in Common::Types::CapeString item, out Common::Types::CapeArrayString dictionaryEntries)raises (Common::Error::ECapePersistenceNotFound, Common::Error::ECapeUnknown, Common::Error::ECapeNoMemory, Common::Error::ECapeInvalidOperation);
					void ExpandCompound(in Common::Types::CapeArrayShort types, in Common::Types::CapeArrayString specifications, out Common::Types::CapeShort numberOfSubstances, out CapeArrayPpdbCompound substances) raises (Common::Error::ECapeNoImpl, Common::Error::ECapePersistenceNotFound, Common::Error::ECapeUnknown, Common::Error::ECapeInvalidOperation, Common::Error::ECapeNoMemory, Common::Error::ECapeBadArgument);
					void GetStructure(in Common::Types::CapeShort specType, in Common::Types::CapeString specification, in Common::Types::CapeString substance, inout Common::Types::CapeShort structureFormat, out Common::Types::CapeString chemicalStructure) raises (Common::Error::ECapeNoImpl, Common::Error::ECapePersistenceNotFound, Common::Error::ECapeUnknown, Common::Error::ECapeInvalidOperation, Common::Error::ECapeNoMemory, Common::Error::ECapeBadArgument);
					void GetCompounds(in Common::Types::CapeShort rankNo, out Common::Types::CapeShort numberOfCompounds, out CapeArrayPpdbCompound compounds, out Common::Types::CapeArrayString purities, out Common::Types::CapeArrayShort reactionStoichiometry, out Common::Types::CapeBoolean isOK) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidOperation, Common::Error::ECapeNoMemory);
					void GetBibliography(in Common::Types::CapeShort rankNo, out Common::Types::CapeString referenceID, out Common::Types::CapeString authors, out Common::Types::CapeString publisher, out Common::Types::CapeString journal, out Common::Types::CapeString coden, out Common::Types::CapeString issn, out Common::Types::CapeString titleOfBook, out Common::Types::CapeString isbn, out Common::Types::CapeString edition, out Common::Types::CapeString volume, out Common::Types::CapeString issue, out Common::Types::CapeString page, out Common::Types::CapeString year, out Common::Types::CapeString titleOfPaper, out Common::Types::CapeBoolean isOK) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidOperation, Common::Error::ECapeNoMemory);
				};

				interface ICapePpdbTables : ICapePpdb {
					void QueryForTables(in Common::Types::CapeShort numberOfCompounds, in Common::Types::CapeArrayShort types, in Common::Types::CapeArrayString chemicalSystems, in Common::Types::CapeBoolean querySubmixtures, in Common::Types::CapeArrayString properties) raises (Common::Error::ECapeNoImpl, Common::Error::ECapeLimitedImpl, Common::Error::ECapePersistenceNotFound, Common::Error::ECapeUnknown, Common::Error::ECapeInvalidOperation, Common::Error::ECapeNoMemory, Common::Error::ECapeBadArgument);
					void ExtendedQueryForTables(in Common::Types::CapeShort numberOfCompounds, in Common::Types::CapeArrayShort types, in Common::Types::CapeArrayString chemicalSystem, in Common::Types::CapeBoolean querySubmixtures, in Common::Types::CapeArrayString properties, in Common::Types::CapeString phaseEqInformation, in Common::Types::CapeArrayString statesOfAggregation, in Common::Types::CapeString tableInformation, in Common::Types::CapeString addPropInformation, in Common::Types::CapeFloat lowerTemperature, in Common::Types::CapeFloat upperTemperature, in Common::Types::CapeFloat lowerPressure, in Common::Types::CapeFloat upperPressure, in Common::Types::CapeFloat lowerMoleFraction, in Common::Types::CapeFloat upperMoleFraction, in Common::Types::CapeShort rankNoOfChemialSystem) raises (Common::Error::ECapeNoImpl, Common::Error::ECapeLimitedImpl, Common::Error::ECapePersistenceNotFound, Common::Error::ECapeUnknown, Common::Error::ECapeInvalidOperation, Common::Error::ECapeNoMemory, Common::Error::ECapeBadArgument);
					void GetTableDescription(in Common::Types::CapeShort numberOfTablesWanted, out Common::Types::CapeShort firstRankNo, out Common::Types::CapeShort lastRankNo, out Common::Types::CapeArrayShort numbersOfCompounds, out Common::Types::CapeArrayString compoundNames, out Common::Types::CapeArrayString tableDescriptions, out Common::Types::CapeArrayShort numbersOfProperties, out Common::Types::CapeArrayShort numbersOfDataPoints, out Common::Types::CapeArrayFloat temperatureRanges, out Common::Types::CapeArrayString temperatureUnits, out Common::Types::CapeArrayFloat pressureRanges, out Common::Types::CapeArrayString pressureUnits, out Common::Types::CapeBoolean isOK) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidOperation, Common::Error::ECapeNoMemory, Common::Error::ECapeBadArgument);
					void GetTableData(in Common::Types::CapeShort rankNo, in Common::Types::CapeBoolean siWanted, out Common::Types::CapeShort numberOfProperties, out Common::Types::CapeArrayString properties, out Common::Types::CapeArrayShort relatedToCompoundNo, out Common::Types::CapeString phaseEqInformation, out Common::Types::CapeString tableInformation, out Common::Types::CapeArrayString statesOfAggregation, out Common::Types::CapeShort numberOfDataPoints, out Common::Types::CapeArrayFloat values, out Common::Types::CapeArrayString units, out Common::Types::CapeBoolean isOK) raises (Common::Error::ECapeNoImpl, Common::Error::ECapePersistenceNotFound, Common::Error::ECapeUnknown, Common::Error::ECapeInvalidOperation, Common::Error::ECapeNoMemory, Common::Error::ECapeBadArgument);
					void GetTableDataInformation(in Common::Types::CapeShort rankNo, in Common::Types::CapeBoolean siWanted, out Common::Types::CapeArrayFloat expErrors, out Common::Types::CapeArrayString errorUnits, out Common::Types::CapeArrayString addPropInformation, out Common::Types::CapeArrayString setInformation, out Common::Types::CapeArrayString notes, out Common::Types::CapeBoolean isOK) raises (Common::Error::ECapeUnknown,Common::Error::ECapeInvalidOperation, Common::Error::ECapeNoMemory, Common::Error::ECapeBadArgument);
				};

				interface ICapePpdbModels : ICapePpdb {
					void QueryForModels(in Common::Types::CapeShort numberOfCompounds, in Common::Types::CapeArrayShort types, in Common::Types::CapeArrayString chemicalSystem, in Common::Types::CapeBoolean querySubmixtures, in Common::Types::CapeString modelName, in Common::Types::CapeString property) raises (Common::Error::ECapeNoImpl, Common::Error::ECapeLimitedImpl, Common::Error::ECapePersistenceNotFound, Common::Error::ECapeUnknown, Common::Error::ECapeInvalidOperation, Common::Error::ECapeNoMemory, Common::Error::ECapeBadArgument);
					void ExtendedQueryForModels (in Common::Types::CapeShort numberOfCompounds, in Common::Types::CapeArrayShort types, in Common::Types::CapeArrayString chemicalSystem, in Common::Types::CapeBoolean querySubmixtures, in Common::Types::CapeString modelName, in Common::Types::CapeString property, in Common::Types::CapeString stateOfAggregation, in Common::Types::CapeString modelSpecificInformation, in Common::Types::CapeFloat lowerTemperature, in Common::Types::CapeFloat upperTemperature, in Common::Types::CapeFloat lowerPressure, in Common::Types::CapeFloat upperPressure) raises (Common::Error::ECapeNoImpl, Common::Error::ECapeLimitedImpl, Common::Error::ECapePersistenceNotFound, Common::Error::ECapeUnknown, Common::Error::ECapeInvalidOperation, Common::Error::ECapeNoMemory, Common::Error::ECapeBadArgument);
					void QueryTableID(in Common::Types::CapeString tableID) raises (Common::Error::ECapePersistenceNotFound, Common::Error::ECapeUnknown, Common::Error::ECapeInvalidOperation, Common::Error::ECapeNoMemory);
					void GetModelDescription(in Common::Types::CapeShort numberOfSetsWanted, out Common::Types::CapeShort firstRankNo, out Common::Types::CapeShort lastRankNo, out Common::Types::CapeArrayShort numbersOfCompounds, out Common::Types::CapeArrayString compoundNames, out Common::Types::CapeArrayString modelNames, out Common::Types::CapeArrayShort numbersOfIndependentProperties, out Common::Types::CapeArrayFloat limitsOfValidity, out Common::Types::CapeArrayString unitsForLimitsOfValidity, out Common::Types::CapeBoolean isOK) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidOperation, Common::Error::ECapeNoMemory);
					void GetModel(in Common::Types::CapeShort rankNo, out ICapePpdbAbstractModel model, out Common::Types::CapeBoolean isOK) raises (Common::Error::ECapePersistenceNotFound, Common::Error::ECapeUnknown, Common::Error::ECapeInvalidOperation, Common::Error::ECapeNoMemory);
					void GetModelParameters(in Common::Types::CapeShort rankNo, out Common::Types::CapeString modelName, out Common::Types::CapeString dependentProperty, out Common::Types::CapeShort numberOfIndependentProperties, out Common::Types::CapeArrayString independentProperties, out Common::Types::CapeArrayShort relatedToCompoundNo, out Common::Types::CapeString phaseEqInformation, out Common::Types::CapeString setInformation, out Common::Types::CapeString stateOfAggregation, out Common::Types::CapeArrayString propertyUnits, out Common::Types::CapeArrayString parameterNames, out Common::Types::CapeArrayDouble parameters, out Common::Types::CapeShort parameterType, out Common::Types::CapeArrayFloat limitsOfValidity, out Common::Types::CapeBoolean isOK) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidOperation, Common::Error::ECapeNoMemory);
					void GetModelParametersInformation(in Common::Types::CapeShort rankNo, out Common::Types::CapeArrayString tableIDsOriginalData, out Common::Types::CapeArrayString addPropInformation, out Common::Types::CapeArrayFloat varianceCovarianceMatrix, out Common::Types::CapeFloat estimatedPrecision, out Common::Types::CapeBoolean isOK) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidOperation, Common::Error::ECapeNoMemory);
				};				 

				interface ICapePpdbAbstractModel: Common::Identification::ICapeIdentification {
					void GetModelContents(out Common::Types::CapeShort numberOfComponents, out Common::Types::CapeArrayString componentNames, out Common::Types::CapeString modelName, out Common::Types::CapeString dependentProperty, out Common::Types::CapeShort numberOfIndependentProperties, out Common::Types::CapeArrayFloat limitsOfValidity, out Common::Types::CapeArrayString unitsForLimitsOfValidity) raises (Common::Error::ECapeUnknown);
					void GetModelInformation(out Common::Types::CapeArrayString tableIdsOriginalData, out Common::Types::CapeString phaseEqInformation, out Common::Types::CapeString setInformation, out Common::Types::CapeString stateOfAggregation, out Common::Types::CapeArrayString addPropInformation, out Common::Types::CapeFloat estimatedPrecision) raises (Common::Error::ECapeUnknown);
					void PerformModelCalculation(in Common::Types::CapeArrayFloat initialValues, in Common::Types::CapeArrayFloat finalValues, in Common::Types::CapeArrayFloat stepSizes, in Common::Types::CapeArrayString independentUnits, inout Common::Types::CapeArrayString dependentUnit, out Common::Types::CapeArrayFloat calculatedValues) raises (Common::Error::ECapeUnknown);
				};

			}; // END Ppdb module


		}; // END PhyProp module ----------------------------------------------



		// ---- The scope of the Numeric interfaces ---------------------------

		module Numeric{


			// ---- The scope of numerical solvers interface ------------------
			// Reference document: Numerical Solvers and Partial Differential Algebraic Solvers
			module Solvers {

				// ---- The scope of the Eso ----------------------------------
				module Eso{
						
					typedef enum eCapeESOType{
						CAPE_LAESO,
						CAPE_NLAESO,
						CAPE_DAEESO,
						CAPE_GLOBALESO
					} CapeESOType;

					typedef enum eCapeMatrixType{
						CAPE_FULL,
						CAPE_UNSTRUCTURED,
						CAPE_BANDED
					} CapeMatrixType;

					typedef enum eCapeMatrixOrdering{
						CAPE_ROW,
						CAPE_COLUMN,
						CAPE_OTHER
					} CapeMatrixOrdering;

					typedef sequence<CapeESOType> CapeArrayESOType;
					typedef sequence<CapeMatrixType> CapeArrayMatrixType;
					typedef sequence<CapeMatrixOrdering> CapeArrayMatrixOrdering;

					// 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::Types::CapeLong GetNumRows() raises (Common::Error::ECapeUnknown);
						Common::Types::CapeLong GetNumCols() raises (Common::Error::ECapeUnknown);
						Common::Types::CapeBoolean QuerySymmetric() raises (Common::Error::ECapeUnknown);
						CapeMatrixOrdering QueryOrdering() raises (Common::Error::ECapeUnknown);
						CapeMatrixType QueryType() raises (Common::Error::ECapeUnknown);
						Common::Types::CapeArrayDouble GetValues() raises (Common::Error::ECapeUnknown);
					};
					
					interface ICapeNumericFullMatrix : ICapeNumericMatrix {
					};
					
					interface ICapeNumericUnstructuredMatrix : ICapeNumericMatrix {
						void GetStructure(out Common::Types::CapeArrayLong rowIndices, out Common::Types::CapeArrayLong colIndices) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
					};
					
					interface ICapeNumericBandedMatrix : ICapeNumericMatrix {
						Common::Types::CapeLong GetBandWidth() raises (Common::Error::ECapeUnknown);
					};
					
					interface ICapeNumericESOManager {
						ICapeNumericESO CreateESO(in CapeESOType typeOfESO) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeLimitedImpl, Common::Error::ECapeNoMemory, Common::Error::ECapeFailedInitialisation);
					};

					interface ICapeNumericESO {
						Common::Types::CapeLong GetNumVars() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);
						Common::Types::CapeLong GetNumEqns() raises (Common::Error::ECapeUnknown);
						void SetFixedVariables(in Common::Types::CapeArrayLong varIndices,in Common::Types::CapeArrayDouble varValues) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds);
						void SetAllVariables(in Common::Types::CapeArrayDouble varValues) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds);
						void SetVariables(in Common::Types::CapeArrayLong varIndices,in Common::Types::CapeArrayDouble varValues) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds);
						Common::Types::CapeArrayDouble GetAllVariables() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);
						Common::Types::CapeArrayDouble GetVariables(in Common::Types::CapeArrayLong varIndices) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds);
						Common::Types::CapeArrayDouble GetAllResiduals() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder, Common::Error::ECapeFailedInitialisation);
						Common::Types::CapeArrayDouble GetResiduals(in Common::Types::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);
						Common::Types::CapeArrayDouble GetJacobianValues(in Common::Types::CapeArrayLong indices) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeNoImpl, Common::Error::ECapeOutOfBounds);
						void SetVariablesIndex(in Common::Types::CapeArrayLong varIndexes) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds);
						Common::Types::CapeArrayDouble GetLowerBounds() raises (Common::Error::ECapeUnknown);
						Common::Types::CapeArrayDouble GetUpperBounds() 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 Common::Types::CapeArrayDouble values) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds);
						ICapeNumericMatrix GetLHS() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);
						Common::Types::CapeArrayDouble GetRHS() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);
					};
					
					interface ICapeNumericNLAESO : ICapeNumericESO {
					};
					
					
					interface ICapeNumericDAESO : ICapeNumericESO {
						void SetAllDerivatives(in Common::Types::CapeArrayDouble varValues) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds);
						Common::Types::CapeArrayDouble GetAllDerivatives() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);
						Common::Types::CapeArrayDouble GetDerivatives(in Common::Types::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);
						Common::Types::CapeArrayDouble GetDiffJacobianValues(in Common::Types::CapeArrayLong indices) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeNoImpl, Common::Error::ECapeOutOfBounds);
						void SetIndependentVar(in Common::Types::CapeDouble indVar) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
						Common::Types::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 PDA ESO ------------------------------
				module PdaEso{

					typedef enum eCapeBoundKind{
						CAPE_OPEN,
						CAPE_CLOSED
					} CapeBoundKind;

					typedef enum eCapeInnerVariableKind{
						CAPE_ID,
						CAPE_IDP,
						CAPE_IDD,
						CAPE_II,
						CAPE_IT
					} CapeInnerVariableKind;

					typedef enum eCapeOuterVariableKind{
						CAPE_FFUNCTION,
						CAPE_GFUNCTION,
						CAPE_HFUNCTION,
						CAPE_KFUNCTION
					} CapeOuterVariableKind;

					typedef sequence<CapeBoundKind> CapeArrayBoundKind;
					typedef sequence<CapeInnerVariableKind> CapeArrayInnerVariableKind;
					typedef sequence<CapeOuterVariableKind> CapeArrayOuterVariableKind;

					// Foward declaration of interfaces
					interface ICapeNumericPDAESODomain;
					interface ICapeNumericPDAESOVariable;
					interface ICapeNumericPDAESOEqDomain;
					interface ICapeNumericPDAESOEquation;
					interface ICapeNumericPDAESOProjection;
					interface ICapeNumericPDAESOPDDomain;					
					interface ICapeNumericInnerVariable;
					interface ICapeNumericInnerDependentVariable;
					interface ICapeNumericInnerDependentVariableDerivative;
					interface ICapeNumericInnerIndependentVariable;
					interface ICapeNumericOuterVariable;
					interface ICapeNumericOutergFunction;
					interface ICapeNumericPDAESO;

					// Interface Sequence
					typedef sequence<ICapeNumericPDAESODomain> CapeArrayNumericPDAESODomain;
					typedef sequence<ICapeNumericPDAESOVariable> CapeArrayNumericPDAESOVariable;
					typedef sequence<ICapeNumericPDAESOEqDomain> CapeArrayNumericPDAESOEqDomain;
					typedef sequence<ICapeNumericPDAESOEquation> CapeArrayNumericPDAESOEquation;
					typedef sequence<ICapeNumericPDAESOProjection> CapeArrayNumericPDAESOProjection;
					typedef sequence<ICapeNumericPDAESOPDDomain> CapeArrayNumericPDAESOPDDomain;
					typedef sequence<ICapeNumericInnerVariable> CapeArrayNumericInnerVariable;
					typedef sequence<ICapeNumericInnerDependentVariable> CapeArrayNumericInnerDependentVariable;
					typedef sequence<ICapeNumericInnerDependentVariableDerivative> CapeArrayNumericInnerDependentVariableDerivative;
					typedef sequence<ICapeNumericInnerIndependentVariable> CapeArrayNumericInnerIndependentVariable;
					typedef sequence<ICapeNumericOuterVariable> CapeArrayNumericOuterVariable;
					typedef sequence<ICapeNumericOutergFunction> CapeArrayNumericOutergFunction;
					typedef sequence<ICapeNumericPDAESO> CapeArrayNumericPDAESO;


					interface ICapeNumericPDAESODomain {
						Common::Types::CapeString GetName() raises (Common::Error::ECapeUnknown);
						Common::Types::CapeLong GetIndex() raises (Common::Error::ECapeUnknown);
						Common::Types::CapeDouble GetUpperBound(out CapeBoundKind bound_kind) raises (Common::Error::ECapeUnknown);
						Common::Types::CapeDouble GetLowerBound(out CapeBoundKind bound_kind) raises (Common::Error::ECapeUnknown);
					};

					interface ICapeNumericPDAESOVariable {
						Common::Types::CapeString GetName() raises (Common::Error::ECapeUnknown);
						Common::Types::CapeLong GetIndex() raises (Common::Error::ECapeUnknown);
						Common::Types::CapeDouble GetLowerBound() raises (Common::Error::ECapeUnknown);
						Common::Types::CapeDouble GetUpperBound() raises (Common::Error::ECapeUnknown);
						Common::Types::CapeDouble GetDefaultValue() raises (Common::Error::ECapeUnknown);
						CapeArrayNumericPDAESODomain GetDistribution() raises (Common::Error::ECapeUnknown);
					};

					interface ICapeNumericPDAESOEqDomain:ICapeNumericPDAESODomain {
						ICapeNumericPDAESODomain GetDomain() raises (Common::Error::ECapeUnknown);
						CapeBoundKind GetUBKind() raises (Common::Error::ECapeUnknown);
						CapeBoundKind GetLBKind() raises (Common::Error::ECapeUnknown);
					};

					interface ICapeNumericPDAESOEquation {
						CapeArrayNumericPDAESOEqDomain GetEqDomains() raises (Common::Error::ECapeUnknown);
					};

					interface ICapeNumericPDAESOProjection {
						ICapeNumericPDAESOVariable GetDependentVariable() raises (Common::Error::ECapeUnknown);
						ICapeNumericPDAESOPDDomain GetProjectedDistributionDomain() raises (Common::Error::ECapeUnknown);
					};

					interface ICapeNumericPDAESOPDDomain {
						ICapeNumericPDAESODomain GetDomain() raises (Common::Error::ECapeUnknown);
						Common::Types::CapeDouble GetValue() raises (Common::Error::ECapeUnknown);
					};
					interface ICapeNumericInnerVariable {
						CapeInnerVariableKind GetKind() raises (Common::Error::ECapeUnknown);
					};
					interface ICapeNumericInnerDependentVariable:ICapeNumericInnerVariable {
						ICapeNumericPDAESOVariable GetDependentVariable() raises (Common::Error::ECapeUnknown);
					};
					interface ICapeNumericInnerDependentVariableDerivative:ICapeNumericInnerVariable {
						ICapeNumericPDAESOVariable GetDependentVariable() raises (Common::Error::ECapeUnknown);
						ICapeNumericPDAESODomain GetIndependentVariable() raises (Common::Error::ECapeUnknown);
					};
					interface ICapeNumericInnerIndependentVariable:ICapeNumericInnerVariable {
						ICapeNumericPDAESODomain GetIndependentVariable() raises (Common::Error::ECapeUnknown);
					};
					interface ICapeNumericOuterVariable {
						CapeOuterVariableKind GetKind() raises (Common::Error::ECapeUnknown);
						Common::Types::CapeLong GetInnerEqIndex() raises (Common::Error::ECapeUnknown);
					};
					interface ICapeNumericOutergFunction : ICapeNumericOuterVariable {
						ICapeNumericPDAESODomain GetIndependentVariable() raises (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl);
					};
					interface ICapeNumericPDAESO {
						CapeArrayNumericPDAESODomain GetDomains() raises (Common::Error::ECapeUnknown);
						CapeArrayNumericPDAESOVariable GetVariables() raises (Common::Error::ECapeUnknown);
						CapeArrayNumericPDAESOEquation GetEquations() raises (Common::Error::ECapeUnknown);
						Eso::CapeArrayNumericESO GetInnerESOs() raises (Common::Error::ECapeUnknown);
						Eso::CapeArrayNumericESO GetOuterESOs() raises (Common::Error::ECapeUnknown);
						CapeArrayNumericInnerVariable GetInnerVariables() raises (Common::Error::ECapeUnknown);
						CapeArrayNumericOuterVariable GetOuterVariables() raises (Common::Error::ECapeUnknown);
						Common::Types::CapeLong GetNumInnerOuterESOs() raises (Common::Error::ECapeUnknown);
						void SetNumInnerOuterESOs(in Common::Types::CapeLong num) raises (Common::Error::ECapeUnknown);
					};

				}; // END PdaEso module ---------------------------------------
				
				// ---- The scope of the Model --------------------------------
				module Model{

					typedef enum eCapeModelType{
						CAPE_CONTINUOUS,
						CAPE_HIERARCHICAL,
						CAPE_AGGREGATE
					} CapeModelType;
					
					typedef enum eCapeEventType{
						CAPE_BASIC,
						CAPE_COMPOSITE,
						CAPE_BINARY,
						CAPE_UNARY
					} CapeEventType;
					
					typedef enum eCapeEventInfoKind{
						CAPE_EXTERNAL,
						CAPE_INTERNAL
					} CapeEventInfoKind;
					
					typedef enum eCapeLogicalRelation{
						CAPE_GEQ,
						CAPE_LEQ,
						CAPE_GT,
						CAPE_LT
					} CapeLogicalRelation;
					
					typedef enum eCapeLogicalOperator{
						CAPE_AND,
						CAPE_OR,
						CAPE_NOT
					} CapeLogicalOperator;

					typedef sequence<CapeModelType> CapeArrayModelType;
					typedef sequence<CapeEventType> CapeArrayEventType;
					typedef sequence<CapeEventInfoKind> CapeArrayEventInfoKind;
					typedef sequence<CapeLogicalRelation> CapeArrayLogicalRelation;
					typedef sequence<CapeLogicalOperator> CapeArrayLogicalOperator;

					// 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 {
						ICapeNumericModel CreateModel(in CapeModelType typeOfTheModel) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds, Common::Error::ECapeOutOfResources);
					};
						
					interface ICapeNumericModel {
						Common::Types::CapeLong SetVariablesIndex(in Common::Types::CapeArrayLong varIndexes) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds);
						void SetActiveESO(in Eso::ICapeNumericESO theActiveESO) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, 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);
					};
					
					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 Common::Types::CapeLong inputIndex, in ICapeNumericModel outputModel, in Common::Types::CapeLong outputIndex) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds);
					};
					
					interface ICapeNumericSTN {
						void SetCurrentState(in Common::Types::CapeString theStateName) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds);
						Common::Types::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);
						Common::Types::CapeDouble GetStateTransitions(in Common::Types::CapeString fromState, out CapeArrayNumericEventInfo eventList, out Common::Types::CapeArrayString stateList) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds);
						Common::Types::CapeArrayString GetStateList() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);
						ICapeNumericModel GetStateModel(in Common::Types::CapeString stateName) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds);
						Common::Types::CapeString MoveToNextState(in ICapeNumericEventInfo firedEvent) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfBounds);
					};
					
					interface ICapeNumericEvent {
						Common::Types::CapeBoolean Eval() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);
						CapeEventType QueryType() raises (Common::Error::ECapeUnknown);
					};
						
					interface ICapeNumericBasicEvent : ICapeNumericEvent {
						Common::Types::CapeLong GetVariable() raises (Common::Error::ECapeUnknown);
						CapeLogicalRelation GetLogicalRelation() raises (Common::Error::ECapeUnknown);
						Common::Types::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 {
						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);
						Common::Types::CapeString GetToState() raises (Common::Error::ECapeUnknown);
					};
					
				}; // END Model module ----------------------------------------
					
				
				// ---- The scope of the Solver -------------------------------
				module Solver{
				
					typedef enum eCapeSolverType{
						CAPE_LA,
						CAPE_NLA,
						CAPE_DAE,
						CAPE_PDAE
					} CapeSolverType;
			
					typedef sequence<CapeSolverType> CapeArraySolverType;

					// Foward declaration of interfaces
					interface ICapeNumericSolverFactory;
					interface ICapeNumericSolver;
					interface ICapeNumericLASolver;
					interface ICapeNumericNLASolver;
					interface ICapeNumericDAESolver;
					interface ICapeNumericPDAESolver;
					
					// Interface sequence
					typedef sequence<ICapeNumericDAESolver> CapeArrayNumericDAESolver;
					typedef sequence<ICapeNumericSolverFactory> CapeArrayNumericSolverFactory;
					typedef sequence<ICapeNumericSolver> CapeArrayNumericSolver;
					typedef sequence<ICapeNumericLASolver> CapeArrayNumericLASolver;
					typedef sequence<ICapeNumericNLASolver> CapeArrayNumericNLASolver;
					typedef sequence<ICapeNumericPDAESolver> CapeArrayNumericPDAESolver;
					
					// Factory of statefull transient objects
					interface ICapeNumericSolverFactory {
						ICapeNumericSolver CreateSolver(in CapeSolverType type,in Model::ICapeNumericModel theModel) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds, Common::Error::ECapeOutOfResources);
						void Shutdown() raises (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl);
					};

					// PMC primary object interface
					interface ICapeNumericSolver : Common::Identification::ICapeIdentification, Common::Persistence::ICapePropertySetPersist, Common::Utilities:: ICapeUtilities {
						Common::Types::CapeLong Solve() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder, Common::Error::ECapeSolvingError, Common::Error::ECapeOutOfResources, Common::Error::ECapeTimeOut);
						Common::Types::CapeArrayDouble GetSolution() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);
						void Destroy() raises (Common::Error::ECapeUnknown);
					};
						
					interface ICapeNumericLASolver : ICapeNumericSolver {
					};
						
					interface ICapeNumericNLASolver : ICapeNumericSolver {
						void SetCvgTolerance(in Common::Types::CapeDouble cvgValue) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds);
						Common::Types::CapeDouble GetCvgTolerance() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);
						void SetMaxIterations(in Common::Types::CapeLong maxIteration) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds);
						Common::Types::CapeLong GetMaxIterations() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);
						Common::Types::CapeLong DoNIteration(in Common::Types::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 Common::Types::CapeArrayDouble relTolValue) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds);
						Common::Types::CapeArrayDouble GetRelTolerance() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);
						void SetAbsTolerance(in Common::Types::CapeArrayDouble absTolValues) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds);
						Common::Types::CapeArrayDouble GetAbsTolerance() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);
						Model::CapeArrayNumericEventInfo AdvanceToNextEvent(in Model::CapeArrayNumericEventInfo endConditions, out Common::Types::CapeDouble timeBefore, out Common::Types::CapeDouble timeAfter) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds, Common::Error::ECapeBadInvOrder, Common::Error::ECapeSolvingError, Common::Error::ECapeOutOfResources, Common::Error::ECapeTimeOut);
					};

					interface ICapeNumericPDAESolver : ICapeNumericSolver {
						PdaEso::ICapeNumericPDAESO GetESO()  raises (Common::Error::ECapeUnknown);
						void AdvanceSolution()  raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadArgument, Common::Error::ECapeOutOfBounds, Common::Error::ECapeTimeOut, Common::Error::ECapeOutOfResources, Common::Error::ECapeNoMemory);
					};
					
				}; // END Solver Module ---------------------------------------


			}; // END Solvers module ------------------------------------------


			// ---- The scope of the Optimisation interfaces ------------------
			// Reference document: Optimisation
			module Minlp{

				typedef enum eCapeMINLPObjFunType {
					CAPE_MOT_MAX,
					CAPE_MOT_MIN
				} CapeMINLPObjFunType;

				typedef sequence<CapeMINLPObjFunType> CapeArrayMINLPObjFunType;

				exception ECapeHessianInfoNotAvailable {
					Common::Types::CapeLong code;
					Common::Types::CapeString description;
					Common::Types::CapeString scope;
					Common::Types::CapeString interfaceName;
					Common::Types::CapeString operation;
					Common::Types::CapeURL moreInfo;
				};

				exception ECapeOutsideSolverScope {
					Common::Types::CapeLong code;
					Common::Types::CapeString description;
					Common::Types::CapeString scope;
					Common::Types::CapeString interfaceName;
					Common::Types::CapeString operation;
					Common::Types::CapeURL moreInfo;
				};

				// Forward declaration of interfaces
				interface ICapeMINLP;
				interface ICapeMINLPSolverManager;
				interface ICapeMINLPSystem;

				// Interface sequence
				typedef sequence<ICapeMINLP> CapeArrayMINLP;
				typedef sequence<ICapeMINLPSolverManager> CapeArrayMINLPSolverManager;
				typedef sequence<ICapeMINLPSystem> CapeArrayMINLPSystem;

				interface ICapeMINLP {
					void GetMINLPSize(out Common::Types::CapeLong nv, out Common::Types::CapeLong niv, out Common::Types::CapeLong nlv, out Common::Types::CapeLong nliv, out Common::Types::CapeLong nc, out Common::Types::CapeLong nlc, out Common::Types::CapeLong nlz, out Common::Types::CapeLong nnz, out Common::Types::CapeLong nlzof, out Common::Types::CapeLong nnzof) raises (Common::Error::ECapeUnknown);
					void GetMINLPStructure(in Common::Types::CapeString structuretype, out Common::Types::CapeArrayLong rowindex, out Common::Types::CapeArrayLong columnindex, out Common::Types::CapeArrayLong objindex) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void GetMINLPVariableNames(in Common::Types::CapeArrayLong vids, out Common::Types::CapeArrayString vnames) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void GetMINLPVariableTypes(in Common::Types::CapeArrayLong vids, out Common::Types::CapeArrayBoolean isinteger) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void GetMINLPVariableBooleanAttribute(in Common::Types::CapeArrayLong vids, in Common::Types::CapeString attrib, out Common::Types::CapeArrayBoolean values) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void GetMINLPVariableIntegerAttribute(in Common::Types::CapeArrayLong vids, in Common::Types::CapeString attrib, out Common::Types::CapeArrayLong values) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void GetMINLPVariableDoubleAttribute(in Common::Types::CapeArrayLong vids, in Common::Types::CapeString attrib, out Common::Types::CapeArrayDouble values) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void GetMINLPVariableStringAttribute(in Common::Types::CapeArrayLong vids, in Common::Types::CapeString attrib, out Common::Types::CapeArrayString values) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void GetMINLPVariableBounds(in Common::Types::CapeArrayLong vids, out Common::Types::CapeArrayDouble LB, out Common::Types::CapeArrayDouble UB) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void GetMINLPVariableValues(in Common::Types::CapeArrayLong vids, out Common::Types::CapeArrayDouble values) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void SetMINLPVariableValues(in Common::Types::CapeArrayLong vids, in Common::Types::CapeArrayDouble values) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void GetMINLPConstraintNames(in Common::Types::CapeArrayLong cids, out Common::Types::CapeArrayString cnames) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void GetMINLPConstraintBounds(in Common::Types::CapeArrayLong cids, out Common::Types::CapeArrayDouble LB, out Common::Types::CapeArrayDouble UB) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void GetMINLPConstraintLinearity(in Common::Types::CapeArrayLong cids, out Common::Types::CapeArrayBoolean islinear) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void GetMINLPConstraintBooleanAttribute(in Common::Types::CapeArrayLong cids, in Common::Types::CapeString attrib, out Common::Types::CapeArrayBoolean values) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void GetMINLPConstraintIntegerAttribute(in Common::Types::CapeArrayLong cids, in Common::Types::CapeString attrib, out Common::Types::CapeArrayLong values) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void GetMINLPConstraintDoubleAttribute(in Common::Types::CapeArrayLong cids, in Common::Types::CapeString attrib, out Common::Types::CapeArrayDouble values)raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void GetMINLPConstraintStringAttribute(in Common::Types::CapeArrayLong cids, in Common::Types::CapeString attrib, out Common::Types::CapeArrayString values) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void GetMINLPNonlinearConstraintValues(in Common::Types::CapeArrayLong cids, out Common::Types::CapeArrayDouble values) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void GetMINLPConstraintDerivativeValues(in Common::Types::CapeString structtype, in Common::Types::CapeArrayLong cids, out Common::Types::CapeArrayDouble vals) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void GetMINLPObjectiveFunctionType(out CapeMINLPObjFunType otype) raises (Common::Error::ECapeUnknown);
					void GetMINLPNonlinearObjectiveFunctionValue(out Common::Types::CapeDouble value) raises (Common::Error::ECapeUnknown);
					void GetMINLPObjectiveFunctionDerivativeValues(in Common::Types::CapeString stype, out Common::Types::CapeArrayDouble v) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void GetMINLPObjectiveFunctionBooleanAttribute(in Common::Types::CapeString attrib, out Common::Types::CapeBoolean value) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void GetMINLPObjectiveFunctionIntegerAttribute(in Common::Types::CapeString attrib, out Common::Types::CapeLong value) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void GetMINLPObjectiveFunctionDoubleAttribute(in Common::Types::CapeString attrib, out Common::Types::CapeDouble value) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void GetMINLPObjectiveFunctionStringAttribute(in Common::Types::CapeString attrib, out Common::Types::CapeString value) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void SetMINLPLagrangeMultipliers(in Common::Types::CapeString lmtype, in Common::Types::CapeArrayLong ids, in Common::Types::CapeArrayDouble values)raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void GetMINLPLagrangeMultipliers(in Common::Types::CapeString lmtype, in Common::Types::CapeArrayLong ids, out Common::Types::CapeArrayDouble values) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);
					void GetMINLPHessianStructure(out Common::Types::CapeLong size, out Common::Types::CapeArrayLong rowindex, out Common::Types::CapeArrayLong columnindex) raises (Common::Error::ECapeUnknown, ECapeHessianInfoNotAvailable);
					void SetMINLPHessianValues(in Common::Types::CapeArrayDouble values) raises (Common::Error::ECapeUnknown, ECapeHessianInfoNotAvailable);
					void GetMINLPHessianValues(out Common::Types::CapeArrayDouble values) raises (Common::Error::ECapeUnknown, ECapeHessianInfoNotAvailable);
				};

				// PMC primary object interface
				interface ICapeMINLPSolverManager : Common::Identification::ICapeIdentification, Common::Persistence::ICapePropertySetPersist, Common::Utilities:: ICapeUtilities {
					void CreateMINLPSystem(in ICapeMINLP theMINLP, out ICapeMINLPSystem theMINLPSystem) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfResources, Common::Error::ECapeNoMemory, Common::Error::ECapeLicenceError, Common::Error::ECapeUnknown, ECapeOutsideSolverScope);
				};

				interface ICapeMINLPSystem : Common::Identification::ICapeIdentification {
					void Solve() raises (Common::Error::ECapeOutOfResources, Common::Error::ECapeNoMemory, Common::Error::ECapeTimeOut, Common::Error::ECapeLicenceError, Common::Error::ECapeSolvingError, Common::Error::ECapeUnknown);
					Common::Collection::ICapeCollection GetParameters() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeBadInvOrder);
				};

			}; // END Minlp module --------------------------------------------

			
			// ---- The scope of PEDR interfaces ------------------------------
			// Reference document: Parameter Estimation and Data Reconciliation
			module Pedr{

				typedef enum eCapePEDRVariableType{
					CAPE_MEASURED,
					CAPE_RECONCILIED,
					CAPE_ESTIMATED
				} CapePEDRVariableType;

				typedef sequence <CapePEDRVariableType> CapeArrayPEDRVariableType;
					
				// Forward declaration of interfaces
				interface ICapePEDRData;
				interface ICapePEDRInformation;
				interface ICapePEDRGrossError;

				// Interface sequence
				typedef sequence<ICapePEDRData> CapeArrayPEDRData;
				typedef sequence<ICapePEDRInformation> CapeArrayPEDRInformation;
				typedef sequence<ICapePEDRGrossError> CapeArrayPEDRGrossError;
				
				interface ICapePEDRData {
					void GetData(in Common::Types::CapeString experimentName, out CapePEDRVariableType variablesType, out Common::Types::CapeArrayString variablesName, out Solvers::Eso::ICapeNumericMatrix variablesValue) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void SetData(in Common::Types::CapeString experimentName, in CapePEDRVariableType variablesType, in Common::Types::CapeArrayString variablesName, in Solvers::Eso::ICapeNumericMatrix variablesValue) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfResources, Common::Error::ECapeNoMemory, Common::Error::ECapeUnknown);
				};

				interface ICapePEDRInformation {
					void GetVariablesType(in Common::Types::CapeArrayString variablesName, out CapeArrayPEDRVariableType variablesType) raises( Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);			
					void GetVariablesValue(in Common::Types::CapeArrayString variablesName,in Common::Types::CapeArrayLong variableLBdim, in Common::Types::CapeArrayLong variableUBdim, out Common::Types::CapeArrayDouble variablesValue) raises( Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void GetVariablesVarianceValue(in Common::Types::CapeArrayString variablesName, in Common::Types::CapeArrayLong variableLBdim, in Common::Types::CapeArrayLong variableUBdim, out Common::Types::CapeArrayDouble variablesVariance) raises( Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void GetParametersValue(in Common::Types::CapeArrayString parametersName, out Common::Types::CapeArrayDouble parametersValue) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void GetObjectiveFunctionValue(out Common::Types::CapeDouble objectiveFunctionValue) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);		
					void GetDegreeOfRedundancy(in Common::Types::CapeString variableName, out Common::Types::CapeLong degreeOfRedundancy) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void SetModelRef(in Common::Types::CapeString modelName) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void SetDataRef(in Common::Types::CapeString experimentName) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void SetSolverRef(in Common::Types::CapeString solverName) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void GetModel(in Common::Types::CapeString modelName, out Solvers::Eso::ICapeNumericMatrix processModel) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void Reconcile() raises (Common::Error::ECapeUnknown);
					void Estimate() raises (Common::Error::ECapeUnknown);
				};

				interface ICapePEDRGrossError {
					void GetGrossError(in Solvers::Eso::ICapeNumericMatrix measuredData, in Solvers::Eso::ICapeNumericESO redundantModel, out Common::Types::CapeBoolean grossError, out Common::Types::CapeLong isolationGrossError, out Common::Types::CapeString grossErrorType) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void CompensateGrossError(in Solvers::Eso::ICapeNumericMatrix measuredData, in Solvers::Eso::ICapeNumericESO redundantModel, out Solvers::Eso::ICapeNumericMatrix correctedData) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
					void CheckForPreconditions(in Solvers::Eso::ICapeNumericMatrix measuredData, in Solvers::Eso::ICapeNumericESO processModel, out Common::Types::CapeBoolean operationMode) raises (Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
				};	
		
			}; // END Pedr module ---------------------------------------------

		}; // END Numeric module ----------------------------------------------


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

		module UnitOp{


			// ---- The scope of unit operation interface ---------------------
			// Reference document: Unit Operation
			module Unit{

				// Forward declaration of interfaces
				interface ICapeUnitFactory;
				interface ICapeUnit;
				interface ICapeUnitReport;
				interface ICapeUnitPort;
				interface ICapeUnitTypeInfo;

				// Interface sequence
				typedef sequence<ICapeUnitFactory> CapeArrayUnitFactory;
				typedef sequence<ICapeUnit> CapeArrayUnit;
				typedef sequence<ICapeUnitReport> CapeArrayUnitReport;
				typedef sequence<ICapeUnitPort> CapeArrayUnitPort;
				typedef sequence<ICapeUnitTypeInfo> CapeArrayUnitTypeInfo;

				typedef enum eCapePortType{
					CAPE_MATERIAL,
					CAPE_ENERGY,
					CAPE_INFORMATION,
					CAPE_ANY
				} CapePortType;

				typedef enum eCapePortDirection{
					CAPE_INLET,
					CAPE_OUTLET,
					CAPE_INLET_OUTLET
				} CapePortDirection;

				typedef enum eCapeUnitType {
  					CAPE_REFINERYREACTOROP,
					CAPE_REFINERYBLENDEROP,
					CAPE_REFINERYGENERALOP,
					CAPE_CONVENTIONALOP
				} CapeUnitType;

				typedef sequence<CapePortType> CapeArrayPortType;
				typedef sequence<CapePortDirection> CapeArrayPortDirection;
				typedef sequence<CapeUnitType> CapeArrayUnitType;

				// Factory of statefull transient objects
				interface ICapeUnitFactory {
					ICapeUnit CreateUnit() raises (Common::Error::ECapeUnknown, Common::Error::ECapeOutOfResources);
					void Shutdown() raises (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl);
				};
				
				// PMC primary object interface
				interface ICapeUnit : Common::Identification::ICapeIdentification, Common::Persistence::ICapePropertySetPersist, Common::Utilities:: ICapeUtilities {
					void Calculate () raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder, Common::Error::ECapeOutOfResources, Common::Error::ECapeTimeOut, Common::Error::ECapeSolvingError, Common::Error::ECapeLicenceError);
					Common::Collection::ICapeCollection GetPorts() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeBadInvOrder);
					Common::Types::CapeBoolean Validate(out Common::Types::CapeString message) raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadCOParameter, Common::Error::ECapeBadInvOrder);
					Common::Types::CapeValidationStatus ValStatus() raises (Common::Error::ECapeUnknown);
					ICapeUnitReport GetReportObject() raises (Common::Error::ECapeUnknown);
					Common::Types::CapeBoolean Destroy() raises (Common::Error::ECapeUnknown);
					ICapeUnitTypeInfo TypeInfo() raises (Common::Error::ECapeUnknown);
				};
				
				interface ICapeUnitReport : Common::Identification::ICapeIdentification {
					Common::Types::CapeArrayString Reports () raises (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl);
					Common::Types::CapeString GetSelectedReport() raises (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl);
					void SetSelectedReport(in Common::Types::CapeString report) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeNoImpl);
					Common::Types::CapeString ProduceReport () raises (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl);
					Common::Types::CapeBoolean Destroy() raises (Common::Error::ECapeUnknown);
				};
							
				interface ICapeUnitPort : Common::Identification::ICapeIdentification {
					CapePortType PortType() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);
					CapePortDirection Direction() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);
					PhyProp::Thrm::Cose::ICapeThermoMaterialObject ConnectedObject() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);
					void Connect(in PhyProp::Thrm::Cose::ICapeThermoMaterialObject materialObject) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
					void Disconnect() raises (Common::Error::ECapeUnknown);
					Common::Types::CapeBoolean Destroy() raises (Common::Error::ECapeUnknown);
				};

                // From Petroleum fractions interface specification
				interface ICapeUnitTypeInfo : Common::Identification::ICapeIdentification {
					CapeUnitType GetUnitType() raises (Common::Error::ECapeUnknown);
				};

			}; // END Unit module ---------------------------------------------


		}; // END UnitOp module -----------------------------------------------



		// ---- The scope of the Other interfaces -----------------------------

		module Other{


			// ---- The scope of smst interface -------------------------------
			// Reference document: Sequential Modular Specific Tools
			module Smst{

				// Forward declaration of interfaces
				interface ICapeSMSTFactory;
				interface ICapeSMSTFlowsheetManager;
				interface ICapeSMSTFlowsheet;
				interface ICapeSMSTProcessGraph;
				interface ICapeSMSTPartitionGraph;
				interface ICapeSMSTOpenPartitionGraph;
				interface ICapeSMSTAnalysisManager;
				interface ICapeSMSTAnalysis;
				interface ICapeSMSTSequencing;
				interface ICapeSMSTTearing;
				interface ICapeSMSTPartitioning;
				interface ICapeSMSTSMAnalysis;

				// Interface sequence
				typedef sequence<ICapeSMSTFactory> CapeArraySMSTFactory;
				typedef sequence<ICapeSMSTFlowsheetManager> CapeArraySMSTFlowsheetManager;
				typedef sequence<ICapeSMSTFlowsheet> CapeArraySMSTFlowsheet;
				typedef sequence<ICapeSMSTProcessGraph> CapeArraySMSTProcessGraph;
				typedef sequence<ICapeSMSTPartitionGraph> CapeArraySMSTPartitionGraph;
				typedef sequence<ICapeSMSTOpenPartitionGraph> CapeArraySMSTOpenPartitionGraph;
				typedef sequence<ICapeSMSTAnalysisManager> CapeArraySMSTAnalysisManager;
				typedef sequence<ICapeSMSTAnalysis> CapeArraySMSTAnalysis;
				typedef sequence<ICapeSMSTSequencing> CapeArraySMSTSequencing;
				typedef sequence<ICapeSMSTTearing> CapeArraySMSTTearing;
				typedef sequence<ICapeSMSTPartitioning> CapeArraySMSTPartitioning;
				typedef sequence<ICapeSMSTSMAnalysis> CapeArraySMSTSMAnalysis;
				
				typedef enum eCapeFlowsheetType{
					CAPE_PROCESS_GRAPH,
					CAPE_PARTITION_GRAPH,
					CAPE_OPEN_PARTITION_GRAPH
				} CapeFlowsheetType;

				typedef enum eCapeSMSTStream {
					CAPE_FEED,
					CAPE_PRODUCT,
					CAPE_PROCESS
				} CapeSMSTStream;

				typedef enum eCapeAnalysisType {
					CAPE_SM_ANALYSIS,
					CAPE_PARTITIONING,
					CAPE_TEARING,
					CAPE_SEQUENCING
				} CapeAnalysisType;
				
				typedef enum eCapeConsistencyCode{
					CAPE_CONSISTENCY_YES,
					CAPE_CONSISTENCY_NO,
					CAPE_CONSISTENCY_MAYBE
				} CapeConsistencyCode;

				typedef enum eCapeConvergenceCode{
					CAPE_CONVERGENCE_YES,
					CAPE_CONVERGENCE_NO,
					CAPE_CONVERGENCE_MAYBE
				} CapeConvergenceCode;

				typedef sequence<CapeFlowsheetType> CapeArrayFlowsheetType;
				typedef sequence<CapeSMSTStream> CapeArraySMSTStream;
				typedef sequence<CapeAnalysisType> CapeArrayAnalysisType;
				typedef sequence<CapeConsistencyCode> CapeArrayConsistencyCode;
				typedef sequence<CapeConvergenceCode> CapeArrayConvergenceCode;

				// Factory of statefull transient objects
				interface ICapeSMSTFactory {
					ICapeSMSTFlowsheetManager CreateFlowsheetManager() raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeLicenceError, Common::Error::ECapeBadCOParameter);
					ICapeSMSTAnalysisManager CreateAnalysisManager() raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeLicenceError, Common::Error::ECapeBadCOParameter);
					void Shutdown() raises (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl);
				};
				
				// PMC primary object interface
				interface ICapeSMSTFlowsheetManager : Common::Identification::ICapeIdentification, Common::Persistence::ICapePropertySetPersist, Common::Utilities::ICapeUtilities {
					ICapeSMSTFlowsheet CreateFlowsheet(in CapeFlowsheetType type) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeLicenceError, Common::Error::ECapeBadCOParameter);
					Common::Types::CapeBoolean Destroy() raises (Common::Error::ECapeUnknown);
				};

				interface ICapeSMSTFlowsheet : Common::Identification::ICapeIdentification {
					Common::Collection::ICapeCollection GetParameters() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeBadInvOrder);
					Common::Types::CapeLong GetStreamCount() raises (Common::Error::ECapeUnknown);
					Common::Types::CapeLong GetUnitCount() raises (Common::Error::ECapeUnknown);
					Common::Types::CapeLong GetMaximumUnitCount() raises (Common::Error::ECapeUnknown);
					Common::Types::CapeLong GetMaximumStreamCount() raises (Common::Error::ECapeUnknown);
					Common::Types::CapeBoolean Destroy() raises (Common::Error::ECapeUnknown);
				};
				
				interface ICapeSMSTProcessGraph : ICapeSMSTFlowsheet {
					void AddStream(in Common::Types::CapeLong streamId, in Common::Types::CapeLong iunitId, in Common::Types::CapeLong funitId) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeLimitedImpl);
					void AddStreamWeight(in Common::Types::CapeLong streamId, in Common::Types::CapeDouble weight) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder);
					void AddStreamType(in Common::Types::CapeLong streamId, in CapeSMSTStream streamtype) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder);
					void AddTornProperty(in Common::Types::CapeLong streamId, in Common::Types::CapeBoolean toBeTorn) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder);
					void AddNotTornProperty(in Common::Types::CapeLong streamId, in Common::Types::CapeBoolean notToBeTorn) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder);
					void RemoveStream(in Common::Types::CapeLong streamId) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder);
					Common::Types::CapeArrayLong GetSetOfStream() raises (Common::Error::ECapeUnknown);
					Common::Types::CapeArrayLong GetSetOfUnit() raises (Common::Error::ECapeUnknown);
					void GetStreamConnection(in Common::Types::CapeLong streamId, out Common::Types::CapeLong iunitId, out Common::Types::CapeLong funitId) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder);
					Common::Types::CapeDouble GetStreamWeight(in Common::Types::CapeLong streamId) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder);
					CapeSMSTStream GetStreamType(in Common::Types::CapeLong streamId) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder);
					Common::Types::CapeBoolean GetTornProperty(in Common::Types::CapeLong streamId) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder);
					Common::Types::CapeBoolean GetNotTornProperty(in Common::Types::CapeLong streamId) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder);
				};
				
				interface ICapeSMSTPartitionGraph : ICapeSMSTProcessGraph {
					void SetInitialProcessGraph(in ICapeSMSTProcessGraph parent) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
					ICapeSMSTProcessGraph GetInitialProcessGraph() raises (Common::Error::ECapeUnknown);
				};
				
				interface ICapeSMSTOpenPartitionGraph : ICapeSMSTPartitionGraph {
				};
				
				// PMC primary object interface
				interface ICapeSMSTAnalysisManager : Common::Identification::ICapeIdentification, Common::Persistence::ICapePropertySetPersist, Common::Utilities::ICapeUtilities {
					ICapeSMSTAnalysis CreateAnalysis(in CapeAnalysisType type, in Common::Types::CapeString name) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeLicenceError, Common::Error::ECapeBadCOParameter);
					Common::Types::CapeBoolean Destroy() raises (Common::Error::ECapeUnknown);
					Common::Types::CapeBoolean SMAnalysisImplementation() raises (Common::Error::ECapeUnknown);
					Common::Types::CapeBoolean PartitioningImplementation() raises (Common::Error::ECapeUnknown);
					Common::Types::CapeBoolean TearingImplementation() raises (Common::Error::ECapeUnknown);
					Common::Types::CapeBoolean SequencingImplementation() raises (Common::Error::ECapeUnknown);
				};
				
				interface ICapeSMSTAnalysis : Common::Identification::ICapeIdentification {
					Common::Collection::ICapeCollection GetParameters() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeBadInvOrder);
					Common::Types::CapeLong GetMaximumUnitCount() raises (Common::Error::ECapeUnknown);
					Common::Types::CapeLong GetMaximumStreamCount() raises (Common::Error::ECapeUnknown);
					CapeConvergenceCode Perform(in ICapeSMSTFlowsheet 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);
					CapeConsistencyCode CheckFlowsheetConsistency(in ICapeSMSTFlowsheet flowsheet) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadCOParameter, Common::Error::ECapeNoImpl, Common::Error::ECapeLimitedImpl, Common::Error::ECapeSolvingError, Common::Error::ECapeOutOfResources);
					Common::Types::CapeBoolean Destroy() raises (Common::Error::ECapeUnknown);
				};
				
				interface ICapeSMSTSequencing : ICapeSMSTAnalysis {
					Common::Types::CapeArrayLong GetUnits() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);
				};
				
				interface ICapeSMSTTearing : ICapeSMSTAnalysis {
					Common::Types::CapeArrayLong GetTornStreams() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);
					ICapeSMSTOpenPartitionGraph CreateAndCompleteOpenPartitionGraph(in Common::Types::CapeString name, in ICapeSMSTFlowsheetManager manager) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadCOParameter, Common::Error::ECapeNoImpl, Common::Error::ECapeLimitedImpl, Common::Error::ECapeSolvingError);
				};
						
				interface ICapeSMSTPartitioning : ICapeSMSTAnalysis {
					Common::Types::CapeLong GetPartitionCount() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);
					Common::Types::CapeArrayLong GetUnitsInPartition(in Common::Types::CapeLong partitionNb) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder);
					ICapeSMSTPartitionGraph CreateAndCompletePartitionGraph(in Common::Types::CapeLong partitionNb, in Common::Types::CapeString name, in ICapeSMSTFlowsheetManager manager) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadCOParameter, Common::Error::ECapeNoImpl, Common::Error::ECapeLimitedImpl, Common::Error::ECapeSolvingError);
					void SetExternalSystemId(in Common::Types::CapeLong unitId) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
					Common::Types::CapeLong GetExternalSystemId() raises (Common::Error::ECapeUnknown);
				};

				interface ICapeSMSTSMAnalysis : ICapeSMSTAnalysis {
					Common::Types::CapeLong GetPartitionCount() raises (Common::Error::ECapeUnknown, Common::Error::ECapeBadInvOrder);
					Common::Types::CapeArrayLong GetUnitsInPartition(in Common::Types::CapeLong partitionNb) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder);
					Common::Types::CapeArrayLong GetTornStreamsInPartition(in Common::Types::CapeLong partitionNb) raises (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadInvOrder);
				};


			}; // END Smst module ---------------------------------------------


			// ---- The scope of PSP interface --------------------------------
			// Reference document: Planning and Scheduling Interface Specification
			module Psp{

				// Forward declaration of interfaces
				interface ICapePSPCollection;
				interface ICapePSPResource;
				interface ICapePSPRecipeEntity;
				interface ICapePSPSchedule;
				interface ICapePSPScheduleEntry;
				interface ICapePSPTransaction;
				interface ICapePSPResourceRequirement;
				interface ICapePSPReport;
				interface ICapePSPResourceCollection;
				interface ICapePSPRecipeEntityCollection;
				interface ICapePSPScheduleCollection;
				interface ICapePSPScheduleEntryCollection;
				interface ICapePSPTransactionCollection;
				interface ICapePSPResourceRequirementCollection;
				interface ICapePSP;

				// Interface sequence
				typedef sequence<ICapePSPCollection> CapeArrayPSPCollection;
				typedef sequence<ICapePSPResource> CapeArrayPSPResource;
				typedef sequence<ICapePSPRecipeEntity> CapeArrayPSPRecipeEntity;
				typedef sequence<ICapePSPSchedule> CapeArrayPSPSchedule;
				typedef sequence<ICapePSPScheduleEntry> CapeArrayPSPScheduleEntry;
				typedef sequence<ICapePSPTransaction> CapeArrayPSPTransaction;
				typedef sequence<ICapePSPResourceRequirement> CapeArrayPSPResourceRequirement;
				typedef sequence<ICapePSPReport> CapeArrayPSPReport;
				typedef sequence<ICapePSPResourceCollection> CapeArrayPSPResourceCollection;
				typedef sequence<ICapePSPRecipeEntityCollection> CapeArrayPSPRecipeEntityCollection;
				typedef sequence<ICapePSPScheduleCollection> CapeArrayPSPScheduleCollection;
				typedef sequence<ICapePSPScheduleEntryCollection> CapeArrayPSPScheduleEntryCollection;
				typedef sequence<ICapePSPTransactionCollection> CapeArrayPSPTransactionCollection;
				typedef sequence<ICapePSPResourceRequirementCollection> CapeArrayPSPResourceRequirementCollection;
				typedef sequence<ICapePSP> CapeArrayPSP;

				interface ICapePSPCollection : Common::Collection::ICapeCollection {
					Common::Types::CapeLong Index(in Common::Types::CapeString name) raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeInvalidArgument);
				};

				interface ICapePSPResource : Common::Identification::ICapeIdentification {
					Common::Types::CapeLong GetType() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);
					ICapePSPCollection GetParameters() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);
				};

				interface ICapePSPRecipeEntity : Common::Identification::ICapeIdentification {
					ICapePSPCollection GetParameters() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);
					ICapePSPResourceRequirementCollection GetResourceRequirements() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);
					ICapePSPRecipeEntityCollection GetChildEntities() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);
					Common::Types::CapeLong GetLevel() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);
				};

				interface ICapePSPSchedule : Common::Identification::ICapeIdentification {
					void Solve() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeSolvingError);
					ICapePSPCollection GetParameters() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);
					ICapePSPScheduleEntryCollection GetScheduleEntries() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);
					ICapePSPResourceRequirementCollection GetResourceRequirements() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);
				};

				interface ICapePSPScheduleEntry : Common::Identification::ICapeIdentification {
					ICapePSPCollection GetParameters() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);
					ICapePSPResourceRequirementCollection GetResourceRequirements() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);
					ICapePSPScheduleEntryCollection GetChildEntries() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);
					Common::Types::CapeLong GetLevel() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);
				};

				interface ICapePSPTransaction : Common::Identification::ICapeIdentification {
					ICapePSPCollection GetParameters() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);
				};

				interface ICapePSPResourceRequirement : Common::Identification::ICapeIdentification {
					void SetResource(in ICapePSPResource resource) raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeInvalidArgument);
					ICapePSPResource GetResource() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);
					ICapePSPCollection GetParameters() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);
				};

				interface ICapePSPReport : Common::Identification::ICapeIdentification {
					ICapePSPCollection GetParameters() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeNoImpl, Common::Error::ECapeBadInvOrder);
					void ProduceReport() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeNoImpl, Common::Error::ECapeBadInvOrder);
				};

				interface ICapePSPResourceCollection : ICapePSPCollection {
					ICapePSPResource CreateResource(in Common::Types::CapeString name, in Common::Types::CapeLong kind) raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadArgument);
					ICapePSPResource CloneResource(in ICapePSPResource origin,in Common::Types::CapeString name) raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadArgument);
					void RemoveAll() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);
					void Remove(in Common::Types::CapeLong index) raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds);
				};

				interface ICapePSPRecipeEntityCollection : ICapePSPCollection {
					ICapePSPRecipeEntity CreateRecipeEntity(in Common::Types::CapeString name) raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeInvalidArgument);
					ICapePSPRecipeEntity CloneRecipeEntity(in ICapePSPRecipeEntity origin,in Common::Types::CapeString name) raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadArgument);
					void RemoveAll() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);
					void Remove(in Common::Types::CapeLong index) raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds);
					Common::Types::CapeLong GetLevel() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation );
				};

				interface ICapePSPScheduleCollection : ICapePSPCollection {
					ICapePSPSchedule CreateSchedule(in Common::Types::CapeString name) raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeInvalidArgument);
					ICapePSPSchedule CloneSchedule(in ICapePSPSchedule origin, in Common::Types::CapeString name) raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadArgument);
					void RemoveAll() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);
					void Remove(in Common::Types::CapeLong index) raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds);
				};

				interface ICapePSPScheduleEntryCollection : ICapePSPCollection {
					ICapePSPScheduleEntry CreateScheduleEntry(in Common::Types::CapeString name) raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeInvalidArgument);
					ICapePSPScheduleEntry CloneScheduleEntry(in ICapePSPScheduleEntry origin,in Common::Types::CapeString name) raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadArgument);
					void RemoveAll() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);
					void Remove(in Common::Types::CapeLong index) raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds);
					Common::Types::CapeLong GetLevel() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);
				};

				interface ICapePSPTransactionCollection : ICapePSPCollection {
					ICapePSPTransaction CreateTransaction(in Common::Types::CapeString name,in Common::Types::CapeLong kind) raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadArgument);
					ICapePSPTransaction CloneTransaction(in ICapePSPTransaction origin,in Common::Types::CapeString name) raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadArgument);
					void RemoveAll() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);
					void Remove(in Common::Types::CapeLong index) raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeInvalidArgument);
				};

				interface ICapePSPResourceRequirementCollection : ICapePSPCollection {
					ICapePSPResourceRequirement CreateResourceRequirement(in Common::Types::CapeString name) raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeInvalidArgument);
					ICapePSPResourceRequirement CloneResourceRequirement(in ICapePSPResourceRequirement origin,in Common::Types::CapeString name) raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeInvalidArgument, Common::Error::ECapeBadArgument);
					void RemoveAll() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation);
					void Remove(in Common::Types::CapeLong index) raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeInvalidArgument, Common::Error::ECapeOutOfBounds);
				};

				// PMC primary object interface
				interface ICapePSP : Common::Identification::ICapeIdentification, Common::Persistence::ICapePropertySetPersist, Common::Utilities::ICapeUtilities {
					ICapePSPResourceCollection GetResourceCollection() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeBadInvOrder);
					ICapePSPRecipeEntityCollection GetRecipeCollection() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeBadInvOrder);
					ICapePSPScheduleCollection GetScheduleCollection() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeBadInvOrder);
					ICapePSPTransactionCollection GetTransactionCollection() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeBadInvOrder);
					ICapePSPReport GetReports() raises (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeBadInvOrder);
				};

			}; //End Psp module -----------------------------------------------


		}; // END Other module ------------------------------------------------



	}; // END Business module -------------------------------------------------



}; // END CAPEOPEN100 module --------------------------------------------------