protected override BaseInput NewInputSpaceTime(string engineVariable, string description, OpenMI.Standard.IInputExchangeItem input1, Utilities.Standard1.ExchangeItemV1ModelXml v1Model, int elementCount)
        {
            var input = new InputSpaceTimeUserVariables(
                new Identity(engineVariable, engineVariable, description),
                this,
                new Quantity(input1.Quantity, typeof(double), -999.999),
                ConvertElementSet(input1.ElementSet, v1Model),
                engineVariable, -999.999, elementCount);

            //foreach (var kv in v1Model.UserVariables)
            //    input.UserVariables.Add(kv.Key, kv.Value);

            return input;
        }
        /// <summary>
        /// Convert a OpenMI 1.4 input exchange item into corresponding OpenMI 2.0 base input.
        /// </summary>
        /// <param name="item1">OpenMI version 1.4 input exchange item</param>
        /// <returns>OpenMI 2.0 base input</returns>
        protected override IBaseInput Convert(OpenMI.Standard.IInputExchangeItem item1)
        {
            var engineVariable = string.Format("Input{0}.{1}.{2}",
                ++_nInputs, item1.Quantity.ID, item1.ElementSet.ID);

            var describes = new Describes(engineVariable,
                string.Format("{0}\r\n\r\n{1}", item1.Quantity.Description, item1.ElementSet.Description));

            var v1Xml = V1ModelXmlItem(item1);

            var elementSet = ConvertElementSet(item1.ElementSet, v1Xml);

            var input = new InputSpaceTimeUserVariables(
                new Identity(engineVariable, describes),
                this,
                new Quantity(item1.Quantity, typeof(double), -999.999),
                elementSet,
                engineVariable, -999.999, elementSet.ElementCount);

            if (v1Xml != null)
                foreach (var kv in v1Xml.UserVariables)
                    input.UserVariables.Add(kv.Key, kv.Value);

            return input;
        }