CAPE-OPEN / COCO compliancy testing
The following products have been successfully tested against COCO. Several categories of compliancy have been tested. For each of the product, each compliancy level is indicated in the following table. A list of criteria for each level follows after the table.
About the interoperability testing
The performed tests establish the proper functioning of each of the listed products within the COCO environment, using CAPE-OPEN interfaces (see https://www.colan.org/). Tests are performed following these guidelines
- Tests are performed at request of the software vendor;
- Test results for each test are strictly confidential. Test reports are only available to the vendors of the products;
- Successful test results are published only with the written consent of the vendor;
- Products that do not meet the compliancy tests are not published here, nor are products that have not been submitted to testing;
- The vendor will have the opportunity to correct the product's interface and submit for retesting. If the vendor has reason to believe a test was failed due to a bug in the testing procedure, the vendor should raise objections to the COCO team. This may then lead to a joint investigation;
- Successful tests are only published if the tests are performed by the COCO team;
- After successful testing, the software vendor may refer to this web page in its product description;
- Either of the following conditions need to hold:
- The product to be tested is freely available; or
- The COCO team or AmsterCHEM holds a valid software license to perform the testing (to this end non-disclose agreements can be negotiated); or
- Testing is done at the software vendor's site (travelling, subsistence and time to be compensated at the vendor's expense);
- Future developments in the CAPE-OPEN standards may cause additional criteria to be added the currently listed tests and may cause additional compliancy levels to be defined;
- Passing the test is not a guarantee for a complete and errorless implementation of all CAPE-OPEN functionality. The test aims at verifying functionality that is required and desired for decent functioning across many platforms;
- Testing is done on a non-commercial basis. Testing is currently free of charge. Depending on future demand, a fee may be applicable to cover testing expenses.
If you want to submit your product for testing, please contact info@cocosimulator.org. Suggestions on how to improve testing criteria are also welcome.
Compliancy level criteria
Thermo v1.0 plug compliant
- The package exposes a stand-alone property package or thermo package (exposes ICapeThermoSystem (optional), ICapeThermoPropertyPackage, from Thermodynamics and Physical Properties specification, registration of COM objects and implemented categories as in Methods & Tools integrated guidelines)
- The package properly loads in COFE
- Phase, compound and property definitions are passed ok (proper implementation of ICapeThermoPropertyPackage.GetComponentList, ICapeThermoPropertyPackage.GetPropList, ICapeThermoPropertyPackage.GetPhaseList)
- Property calculations can be performed (proper implementation of ICapeThermoPropertyPackage.CalcProp)
- Compound constants can be obtained (proper implementation of ICapeThermoPropertyPackage.GetComponentConstant)
- Equilibrium calculations can be performed (proper implementation of ICapeThermoPropertyPackage.CalcEquilibrium)
- Component identification is implemented (in accordance with Identification Common Interface)
- Version information is exposed (registry entries as described in Methods & Tools integrated guidelines)
- Errors are presented as CAPE-OPEN HRESULT error codes and appropriate error interfaces are implemented (in accordance with Error Common Interface)
- No errors occur that prevent proper operation of the package
Additional qualifiers:
- Persistence enabled: property package allows for loading and saving using Persistence Common Interface
- Edit enabled: property package allows for Editing via Utilities Common Interface
- Parameter enabled: property package exposes parameters via Utilities Common Interface
Thermo v1.1 plug compliant
- The package exposes a stand-alone property package or property pack manager (exposes ICapeThermoPropertyPackageManager (optional), ICapeThermoPropertyPackage, , from Thermodynamics v1.1 interface)
- The package properly loads in COFE
- Compounds are implemented and exposed (implementation of ICapeThermoCompounds and proper operation of ICapeThermoCompounds.GetCompoundList, ICapeThermoCompounds.GetNumCompounds)
- Phases are implemented and exposed (implementation of ICapeThermoPhases, ICapeThermoPhases.GetNumPhases, ICapeThermoPhases.GetPhaseInfo, ICapeThermoPhases.GetPhaseList)
- The package does expose compound constants, single-phase, two-phase, P-dependent and T-dependent properties in the proper lists (lists can be empty) (implementation of ICapeThermoCompounds.GetConstPropList, ICapeThermoCompounds.GetPDependentPropList, ICapeThermoCompounds.GetTDependentPropList, ICapeThermoCompounds.GetSinglePhasePropList, ICapeThermoCompounds.GetTwoPhasePropList, properties should not appear in lists they do not belong in)
- Compound constants can be obtained (proper implementation of ICapeThermoPropertyPackage.GetCompoundConstant)
- Properties can be calculated (exposing ICapeThermoPropertyRoutine, proper implementation of ICapeThermoCompounds.GetPDependentProperty, ICapeThermoCompounds.GetTDependentProperty, ICapeThermoPropertyRoutine.CalcAndGetLnPhi, ICapeThermoPropertyRoutine.CalcSinglePhaseProp, ICapeThermoPropertyRoutine.CalcTwoPhaseProp)
- Equilibrium calculations can be performed (exposing ICapeThermoEquilibriumRoutine, proper implementation of ICapeThermoEquilibriumRoutine.CalcEquilibrium)
- Component identification is implemented (in accordance with Identification Common Interface)
- Version information is exposed (registry entries as described in Methods & Tools integrated guidelines)
- Errors are presented as CAPE-OPEN HRESULT error codes and appropriate error interfaces are implemented (in accordance with Error Common Interface)
- No errors occur that prevent proper operation of the package
Additional qualifiers:
- Persistence enabled: property package allows for loading and saving using Persistence Common Interface
- Edit enabled: property package allows for Editing via Utilities Common Interface
- Parameter enabled: property package exposes parameters via Utilities Common Interface
Thermo v1.0 calculation routine compliant
- The package exposes a property calculation routine (exposes ICapeThermoCalculationRoutine, from Thermodynamics and Physical Properties specification, registration of COM objects and implemented categories as in Methods & Tools integrated guidelines)
- The property calculation routine can be loaded in TEA
- The property calculation routine manages to work with compounds that are imposed by the property package TEA (TEA exposed compound names, CAS numbers and compound constants. User action for compound identification may or may not be required)
- A list of properties is exposed (proper implementation of ICapeThermoCalculationRoutine.PropList)
- The properties can be calculated (proper implementation of ICapeThermoCalculationRoutine.CalcProp)
- Component identification is implemented (in accordance with Identification Common Interface)
- Version information is exposed (registry entries as described in Methods & Tools integrated guidelines)
- Errors are presented as CAPE-OPEN HRESULT error codes and appropriate error interfaces are implemented (in accordance with Error Common Interface)
- No errors occur that prevent proper operation of the routine
Additional qualifiers:
- Persistence enabled: property package allows for loading and saving using Persistence Common Interface
- Edit enabled: property package allows for Editing via Utilities Common Interface
- Parameter enabled: property package exposes parameters via Utilities Common Interface
Unit operation v1.0 plug compliant
- The package exposes a unit operation interface (exposes ICapeUnit, from Unit Operations specification, registration of COM objects and implemented categories as in Methods & Tools integrated guidelines)
- The unit operation can be loaded into COFE
- The unit operation parameter (if present) are exposed correctly by COFE (if parameters are present, implementation of Utilities interface ICapeUtilities, proper operation of ICapeUtilities.GetParameters, proper operation of the returned collection according to Collections specification, parameter implementation according to Parameter specification)
- The unit operation properly exposes ports (proper implementation of ICapeUnit.GetPorts, and the returned collection according to Collections specification, each port object implementing ICapeUnitPort and identification in accordance with Identification Common Interface)
- The ports can be connected and disconnected (proper operation of ICapeUnitPort.Connect and ICapeUnitPort.Disconnect)
- Port's connected objects are returned when asked (proper operation of ICapeUnitPort.GetConnectedObject)
- Type and direction of ports can be obtained (proper implementation of ICapeUnitPort.GetDirection and ICapeUnitPort.GetPortType)
- The unit operation can be validated (proper implementation of ICapeUnit.GetValStatus and ICapeUnit.Validate)
- The unit operation can run (proper implementation of ICapeUnit.Calculate)
- An equilibrium calculation is performed on each of the connected outlet ports during calculation
- Persistence is implemented such that the unit operation gets properly loaded or stored (unless no persistence is required for proper operation) (IPersistStream or IPersistStreamInit implementation, in accordance with Persistence specification)
- The unit operation's user interface can be accessed if present (proper implementation of ICapeUtilities.Edit)
- Component identification is implemented (in accordance with Identification Common Interface)
- If present, proper implementation of reports (proper implementation of ICapeUnit.GetSelectedReport, ICapeUnit.SetSelectedReport and ICapeUnit.GetReports)
- Version information is exposed (registry entries as described in Methods & Tools integrated guidelines)
- Errors are presented as CAPE-OPEN HRESULT error codes and appropriate error interfaces are implemented (in accordance with Error Common Interface)
- No errors occur that prevent proper operation of the unit operation
Thermo v1.0 material object demands
For socket implementations that pass material objects to plugs, the following demands are made on the functioning of material objects:
- Materials objects expose ICapeThermoMaterialObject interface (in accordance with Thermodynamics and Physical Properties specification)
- If passed to unit operations plugs, component information is exposed (proper implementation of ICapeThermoMaterialObject.ComponentIds and ICapeThermoMaterialObject.GetNumComponents)
- If passed to unit operations plugs, component constants must be exposed (proper implementation of ICapeThermoMaterialObject.GetComponentConstant)
- If passed to unit operations plugs, present phases are exposed (proper implementation of ICapeThermoMaterialObject.PhaseIds)
- Properties can be set and retrieved (proper implementation of ICapeThermoMaterialObject.GetProp and ICapeThermoMaterialObject.SetProp)
- If passed to unit operations plugs, properties can be calculated (proper implementation of ICapeThermoMaterialObject.CalcProp)
- If passed to unit operation plugs, equilibria can be calculated (proper implementation of ICapeThermoMaterialObject.CalcEquilibrium)
- If passed to unit operation plugs, the material object can be duplicated for additional property calculations (proper implementation of ICapeThermoMaterialObject.Duplicate)
- The material object identifies itself (implementation of ICapeIdentification in accordance with Identification Common Interface)
- Material object errors are presented as CAPE-OPEN HRESULT error codes and appropriate error interfaces are implemented (in accordance with Error Common Interface)
Thermo v1.1 material object demands
For socket implementations that pass material objects to plugs, the following demands are made on the functioning of material objects:
- Materials objects expose ICapeThermoMaterial interface (in accordance with Thermodynamics specification)
- If passed to unit operations plugs, component information must be exposed (exposing ICapeThermoCompounds, implementation of ICapeThermoCompounds.GetCompoundList, ICapeThermoCompounds.GetNumCompounds, ICapeThermoCompounds.GetConstPropList)
- If passed to unit operations plugs, component constants are exposed (proper implementation of ICapeThermoCompounds.GetCompoundConstant, ICapeThermoCompounds.GetConstPropList)
- If passed to unit operations plugs, present phases are exposed (proper implementation of ICapeThermoMaterial.GetPresentPhases and ICapeThermoPhases.GetPhaseInfo)
- Phase presence can be set (proper implementation of ICapeThermoMaterial.SetPresentPhases)
- Properties can be set and retrieved (proper implementation of ICapeThermoMaterial.GetOverallProp, ICapeThermoMaterial.GetOverallTPFraction, ICapeThermoMaterial.GetSinglePhaseProp, ICapeThermoMaterial.GetTPFraction, ICapeThermoMaterial.GetTwoPhaseProp, ICapeThermoMaterial.SetOverallProp, ICapeThermoMaterial.SetSinglePhaseProp, ICapeThermoMaterial.SetTwoPhaseProp)
- If passed to unit operations, lists of properties can be obtained (implementation of ICapeThermoCompounds.GetPDependentPropList, ICapeThermoCompounds.GetTDependentPropList, ICapeThermoPropertyRoutine.GetSinglePhasePropList, ICapeThermoPropertyRoutine.GetTwoPhasePropList)
- If passed to unit operations plugs, properties can be calculated (proper implementation of ICapeThermoCompounds.GetPDependentProperty, ICapeThermoCompounds.GetTDependentProperty, ICapeThermoPropertyRoutine.CalcAndGetLnPhi, ICapeThermoPropertyRoutine.CalcSinglePhaseProp, ICapeThermoPropertyRoutine.CalcTwoPhaseProp)
- If passed to unit operation plugs, equilibria can be calculated (proper implementation of ICapeThermoEquilibriumRoutine.CalcEquilibrium, ICapeThermoEquilibriumRoutine.CheckEquilibriumSpec)
- If passed to unit operation plugs, the material object can be duplicated for additional property calculations (proper implementation of ICapeThermoMaterial.CreateMaterial and ICapeThermoMaterial.CopyFromMaterial)
- The material object identifies itself (implementation of ICapeIdentification in accordance with Identification Common Interface)
- Material object errors are presented as CAPE-OPEN HRESULT error codes and appropriate error interfaces are implemented (in accordance with Error Common Interface)
Unit operation v1.0 socket compliant / thermo v1.0
- The COUSCOUS mixer can be loaded into the product
- Initialization and termination if ICapeUtilities is implemented, Initialize and Terminate must be called.
- The mixer parameters are exposed properly to the user (dimensionality support not required), or the unit's user interface is exposed to the user (for exposing parameters, proper interaction with ICapeUtilities.GetParameters, the returned ICapeCollection, and the ICapeParameter and ICapeParameterSpec objects. For exposing the GUI, calling of ICapeUtilities.Edit)
- The mixer ports are correctly exposed (proper interaction with ICapeUnit.GetPorts and the returned ICapeCollection object)
- The mixer ports are correctly exposed after changing the number of inlets (ability to deal with number of ports changing after editing the unit operation)
- Objects connected to the material ports comply with Thermo v1.0 material object demands (see above for Thermo v1.0 material object demands)
- The mixer can be successfully calculated in adiabatic mode (proper calling of Calculate, ability to perform pH flash)
- The unit operation can be saved and restored (proper calling of IPersistStream or IPersistStreamInit)
- COSE errors are presented as CAPE-OPEN HRESULT error codes and appropriate error interfaces are implemented (in accordance with Error Common Interface)
- Unit operation errors are presented to the user (if calculation fails, the user should be able to find out why)
- No errors occur that prevent proper operation of the mixer
Additional qualifiers:
- Logging enabled: unit operation warnings and logged messages are presented to the user (implementation of logging through ICapeDiagnostic.LogMessage, see Simulation Context interface specification)
- Dimensionality aware: dimensionality of unit operation's parameters are displayed
- Handles energy streams: functionality for connecting energy streams to energy ports
- Handles information streams: functionality for connecting information streams to information ports
Unit operation v1.0 socket compliant / thermo v1.1
- The COUSCOUS mixer can be loaded into the product
- Initialization and termination if ICapeUtilities is implemented, Initialize and Terminate must be called.
- The mixer parameters are exposed properly to the user (dimensionality support not required), or the unit's user interface is exposed to the user (for exposing parameters, proper interaction with ICapeUtilities.GetParameters, the returned ICapeCollection, and the ICapeParameter and ICapeParameterSpec objects. For exposing the GUI, calling of ICapeUtilities.Edit)
- The mixer ports are correctly exposed (proper interaction with ICapeUnit.GetPorts and the returned ICapeCollection object)
- The mixer ports are correctly exposed after changing the number of inlets (ability to deal with number of ports changing after editing the unit operation)
- Objects connected to the material ports comply with Thermo v1.1 material object demands (see above for Thermo v1.1 material object demands)
- The mixer can be successfully calculated in adiabatic mode (proper calling of Calculate, ability to perform pH flash)
- The unit operation can be saved and restored (proper calling of IPersistStream or IPersistStreamInit)
- COSE errors are presented as CAPE-OPEN HRESULT error codes and appropriate error interfaces are implemented (in accordance with Error Common Interface)
- Unit operation errors are presented to the user (if calculation fails, the user should be able to find out why)
- No errors occur that prevent proper operation of the mixer
Additional qualifiers:
- Logging enabled: unit operation warnings and logged messages are presented to the user (implementation of logging through ICapeDiagnostic.LogMessage, see Simulation Context interface specification)
- Dimensionality aware: dimensionality of unit operation's parameters are displayed
- Handles energy streams: functionality for connecting energy streams to energy ports
- Handles information streams: functionality for connecting information streams to information ports
Thermo v1.0 socket compliant
- The TEA example thermo v1.0 property packages can be loaded from the thermo package (support for ICapeThermoSystem see Thermodynamics and Physical Properties specification)
- Initialization and termination if ICapeUtilities is implemented, Initialize and Terminate must be called.
- The exposed compounds are interpreted properly (proper calling of ICapeThermoPropertyPackage.GetComponentList and dealing with return values)
- The exposed phase information is interpreted properly (proper calling of ICapeThermoPropertyPackage.GetPhaseList and dealing with return values)
- Property calculations proceed properly (proper calling of ICapeThermoPropertyPackage.CalcProp)
- Equilibrium calculations are based on property package, or if done internally, use fugacities exposed by the property package (calling of ICapeThermoPropertyPackage.CalcEquilibrium, or else results must be in accordance with property package)
- The material objects that are passed comply with Thermo v1.0 material object demands (see above for Thermo v1.0 material object demands)
- COSE errors are presented as CAPE-OPEN HRESULT error codes and appropriate error interfaces are implemented (in accordance with Error Common Interface)
- Thermo errors are presented to the user (if calculation fails, the user should be able to find out why)
- No errors occur that prevent proper operation of the property package
Additional qualifiers:
- Logging enabled: property package warnings and logged messages are presented to the user (implementation of logging through ICapeDiagnostic.LogMessage, see Simulation Context interface specification)
- Persistence aware: contents of the property package can be stored between sessions (calling of IPersistStream or IPersistStreamInit)
- GUI enabled: allows the property package to be edited (calling of ICapeUtilities.Edit)
- Parameter aware: if the property package exposes parameters, they are presented to the user (accessing ICapeUtilities.GetParameters, dealing with the returned ICapeCollection, dealing with the ICapeParameter and ICapeParameterSpec objects)
- Dimensionality aware: dimensionality of unit parameters are displayed
Thermo v1.1 socket compliant
- The TEA example thermo v1.1 property packages can be loaded from the property package manager (support for ICapeThermoPropertyPackageManager according to Thermodynamics v1.1 interface)
- Initialization and termination if ICapeUtilities is implemented, Initialize and Terminate must be called.
- The exposed compounds are interpreted properly (proper calling of ICapeThermoCompounds interface and dealing with its return values)
- The exposed phase information is interpreted properly (proper calling of ICapeThermoPhases interface and dealing with its return values)
- Calculation materials are set before calculations (calling of ICapeThermoMaterialContext.SetMaterial)
- Property calculations proceed properly (proper calling of ICapeThermoCompounds.GetPDependentProperty, ICapeThermoCompounds.GetTDependentProperty, ICapeThermoPropertyRoutine.CalcSinglePhaseProp, ICapeThermoPropertyRoutine.CalcTwoPhaseProp, optionally ICapeThermoPropertyRoutine.CalcAndGetLnPhi)
- Equilibrium calculations are based on property package, or if done internally, use fugacities exposed by the property package (calling of ICapeThermoEquilibriumRoutine.CalcEquilibrium, or else results must be in accordance with property package, e.g. ICapeThermoPropertyRoutine.CalcAndGetLnPhi)
- The material objects that are passed comply with Thermo v1.1 material object demands (see above for Thermo v1.1 material object demands)
- COSE errors are presented as CAPE-OPEN HRESULT error codes and appropriate error interfaces are implemented (in accordance with Error Common Interface)
- Thermo errors are presented to the user (if calculation fails, the user should be able to find out why)
- No errors occur that prevent proper operation of the property package
Additional qualifiers:
- Logging enabled: property package warnings and logged messages are presented to the user (implementation of logging through ICapeDiagnostic.LogMessage, see Simulation Context interface specification)
- Persistence aware: contents of the property package can be stored between sessions (calling of IPersistStream or IPersistStreamInit)
- GUI enabled: allows the property package to be edited (calling of ICapeUtilities.Edit)
- Parameter aware: if the property package exposes parameters, they are presented to the user (accessing ICapeUtilities.GetParameters, dealing with the returned ICapeCollection, dealing with the ICapeParameter and ICapeParameterSpec objects)
- Dimensionality aware: dimensionality of unit parameters are displayed