public ElementSetUnoptimisedStorage(OpenMI.Standard.IElementSet es1)
            : base(es1)
        {
            Elements = new List<Element>(ElementCount);

            for (int n = 0; n < ElementCount; ++n)
                Elements.Add(new Element(es1, n));

            ElementCount = Elements.Count;
        }
Ejemplo n.º 2
0
        private void MainForm_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Control && !(thread != null && thread.IsAlive))
            {
                switch (e.KeyCode)
                {
                case Keys.A:
                    Apply.PerformClick();
                    break;

                case Keys.O:
                    OpenMI.PerformClick();
                    break;

                case Keys.F:
                    if (Tabs.SelectedTab != null)
                    {
                        int index = int.Parse(Tabs.SelectedTab.Name.Remove(0, 2));
                        OpenFullsize(index);
                    }
                    break;

                case Keys.S:
                    if (Tabs.SelectedTab != null)
                    {
                        int index = int.Parse(Tabs.SelectedTab.Name.Remove(0, 2));
                        Save(index);
                    }
                    break;

                case Keys.R:
                    if (Tabs.SelectedTab != null)
                    {
                        int index = int.Parse(Tabs.SelectedTab.Name.Remove(0, 2));
                        Reset(index);
                    }
                    break;
                }
            }
        }
 public ElementSetProposed(OpenMI.Standard.IElementSet iElementSet1)
     : base(iElementSet1)
 {
 }
 protected virtual BaseOutput NewOutputSpaceTime(string engineVariable, string description,
     OpenMI.Standard.IOutputExchangeItem output1, 
     Utilities.Standard1.ExchangeItemV1ModelXml v1Model, int elementCount)
 {
     return new OutputSpaceTimeComponent1(
         new Identity(engineVariable, engineVariable, description),
         this,
         new Quantity(output1.Quantity, typeof(double), -999.999),
         ConvertElementSet(output1.ElementSet, v1Model),
         engineVariable, -999.999, elementCount);
 }
        protected IElementSet ConvertElementSet(OpenMI.Standard.IElementSet elementSet1,
            Utilities.Standard1.ExchangeItemV1ModelXml v1Model)
        {
            if (v1Model != null)
            {
                if (elementSet1.GetType().ToString() == "FluidEarth.Sdk.ElementSetGridRegular"
                    && v1Model.UserVariables["ElementType"] == "XYPoint"
                    && v1Model.UserVariables["Storage"] == "RegularGrid")
                {
                    var cellCountX = int.Parse(v1Model.UserVariables["N"]) - 1;
                    var cellCountY = int.Parse(v1Model.UserVariables["M"]) - 1;
                    var originX = double.Parse(v1Model.UserVariables["OriginX"]);
                    var originY = double.Parse(v1Model.UserVariables["OriginY"]);
                    var deltaX = double.Parse(v1Model.UserVariables["dX"]);
                    var deltaY = double.Parse(v1Model.UserVariables["dY"]);

                    var parameters = new ParametersGridRegular(
                        cellCountX, cellCountY,
                        new Coord2d(originX, originY),
                        deltaX, deltaY);

                    bool fastN = v1Model.UserVariables["Packing"] == "FastN";

                    return new ElementSetGridRegularPoints(parameters, ElementSetGridRegularPoints.Located.Node, fastN);
                }
            }

            return new ElementSetUnoptimisedStorage(elementSet1);
        }
            public void PrePrepare(
                LinkableComponentV1OpenMI component2,
                OpenMI.Standard.ILinkableComponent component1,
                double startTime, double updateLinkTimeIncrement,
                List<IBaseInput> activeInputs, List<IBaseOutput> activeOutputs)
            {
                Contract.Requires(component1 != null, "component1 != null");
                Contract.Requires(component2 != null, "component2 != null");

                Component1 = component1;

                Component1.Initialize(component2.Arguments.Select(a => new Utilities.Standard1.Argument1(a)).ToArray());

                _currentTime = startTime;
                _updateLinkTimeIncrement = updateLinkTimeIncrement;

                // Create internal links between components 1 and 2
                // T2 --> T1
                // S1 --> S2

                Utilities.Standard1.TimeSpan timeHorizon1
                    = new Utilities.Standard1.TimeSpan(component2.TimeExtent.TimeHorizon);

                OpenMI.Standard.IInputExchangeItem input;
                OpenMI.Standard.IOutputExchangeItem output;
                OpenMI.Standard.ILink internalLink;

                ITimeSpaceExchangeItem itemTimeSpace;

                string idQuantity, idElementSet;

                activeInputs.ForEach(i =>
                {
                    idQuantity = i.ValueDefinition.Caption;

                    itemTimeSpace = i as ITimeSpaceExchangeItem;
                    idElementSet = itemTimeSpace == null
                        ? i.Caption // what else?
                        : itemTimeSpace.SpatialDefinition.Caption;

                    internalLink = null;

                    for (int n = 0; n < _component1.InputExchangeItemCount; ++n)
                    {
                        input = _component1.GetInputExchangeItem(n);

                        if (input.Quantity.ID != idQuantity
                            || input.ElementSet.ID != idElementSet)
                            continue;

                        var isVector = input.Quantity.ValueType == OpenMI.Standard.ValueType.Vector;

                        // Get providers convertor to use directly

                        Contract.Requires(i.Provider is IHasValueSetConvertor,
                            "i.Provider is IHasValueSetConvertor");

                        var convertorProvider = ((IHasValueSetConvertor)i.Provider).ValueSetConverter
                            as IValueSetConverterTime;

                        Contract.Requires(convertorProvider != null,
                            "i.Provider.ValueSetConverter is IValueSetConverterTime");

                        internalLink = new Utilities.Standard1.InternalLink(
                            _component1, input, timeHorizon1, convertorProvider, isVector);

                        _linksIn.Add(internalLink);

                        _component1.AddLink(internalLink);

                        break;
                    }

                    if (internalLink == null)
                        throw new Exception(string.Format(
                            "OpenMI.Standard.IOutputExchangeItem not found with Quality,ElementSet ids if \"{0}\",\"{1}\"",
                            idQuantity, idElementSet));
                });

                activeOutputs.ForEach(o =>
                {
                    idQuantity = o.ValueDefinition.Caption;

                    itemTimeSpace = o as ITimeSpaceExchangeItem;
                    idElementSet = itemTimeSpace == null
                        ? o.Caption // what else?
                        : itemTimeSpace.SpatialDefinition.Caption;

                    internalLink = null;

                    for (int n = 0; n < _component1.OutputExchangeItemCount; ++n)
                    {
                        output = _component1.GetOutputExchangeItem(n);

                        if (output.Quantity.ID != idQuantity
                            || output.ElementSet.ID != idElementSet)
                            continue;

                        internalLink = new Utilities.Standard1.InternalLink(_component1, output, timeHorizon1);

                        _linksOut.Add(internalLink);

                        _component1.AddLink(internalLink);

                        if (((IHasValueSetConvertor)o).ValueSetConverter is ValueSetConverterTimeEngineDoubleStandard1)
                        {
                            var convertor = (ValueSetConverterTimeEngineDoubleStandard1)((IHasValueSetConvertor)o).ValueSetConverter;

                            convertor.SetRuntime(this, internalLink);
                        }
                        else if (((IHasValueSetConvertor)o).ValueSetConverter is ValueSetConverterTimeEngineDoubleVector3dStandard1)
                        {
                            var convertor = (ValueSetConverterTimeEngineDoubleVector3dStandard1)((IHasValueSetConvertor)o).ValueSetConverter;

                            convertor.SetRuntime(this, internalLink);
                        }
                        else
                            throw new Exception("o.ValueSetConverter as ValueSetConverterTimeEngineDouble?");

                        break;
                    }

                    if (internalLink == null)
                        throw new Exception(string.Format(
                            "OpenMI.Standard.IInputExchangeItem not found with Quality,ElementSet ids if \"{0}\",\"{1}\"",
                            idQuantity, idElementSet));
                });

                if (_linksOut.Count < 1)
                    throw new Exception("At least one output link must be specified");
            }
        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 elementSet = new ElementSetUnoptimisedStorage(item1.ElementSet);

            return new InputSpaceTimeComponent1(
                new Identity(engineVariable, describes),
                this,
                new Quantity(item1.Quantity, typeof(double), -999.999),
                elementSet,
                engineVariable, -999.999, elementSet.ElementCount);
        }
        protected override BaseOutput NewOutputSpaceTime(string engineVariable, string description, OpenMI.Standard.IOutputExchangeItem output1, Utilities.Standard1.ExchangeItemV1ModelXml v1Model, int elementCount)
        {
            var output = new OutputSpaceTimeUserVariables(
                new Identity(engineVariable, engineVariable, description),
                this,
                new Quantity(output1.Quantity, typeof(double), -999.999),
                ConvertElementSet(output1.ElementSet, v1Model),
                engineVariable, -999.999, elementCount);

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

            return output;
        }
 /// <summary>
 /// Extract specific Model 1 output details from v1 XML model file
 /// </summary>
 /// <param name="item">V1 output exchange item</param>
 /// <returns>V1 item details</returns>
 Utilities.Standard1.ExchangeItemV1ModelXml V1ModelXmlItem(OpenMI.Standard.IOutputExchangeItem item)
 {
     return V1ModelOutputs != null
         ? V1ModelOutputs
             .Values
             .Where(v =>
                 v.Quantity.Id == item.Quantity.ID
                 && v.ElementSet.Id == item.ElementSet.ID)
             .SingleOrDefault()
         : null;
 }
        /// <summary>
        /// Convert a OpenMI 1.4 output exchange item into corresponding OpenMI 2.0 base output.
        /// </summary>
        /// <param name="item1">OpenMI version 1.4 output exchange item</param>
        /// <returns>OpenMI 2.0 base output</returns>
        protected override IBaseOutput Convert(OpenMI.Standard.IOutputExchangeItem item1)
        {
            var engineVariable = string.Format("Output{0}.{1}.{2}",
                ++_nOutputs, 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 output = new OutputSpaceTimeUserVariables(
                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)
                    output.UserVariables.Add(kv.Key, kv.Value);

            return output;
        }
 public Argument1(OpenMI.Standard2.IArgument arg2)
 {
     Key = arg2.Caption;
     Value = arg2.ValueAsString;
     ReadOnly = arg2.IsReadOnly;
     Description = arg2.Description;
 }
 /// <summary>
 /// Convert a OpenMI 1.4 output exchange item into corresponding OpenMI 2.0 base output.
 /// </summary>
 /// <param name="item1">OpenMI version 1.4 output exchange item</param>
 /// <returns>OpenMI 2.0 base output</returns>
 protected abstract IBaseOutput Convert(OpenMI.Standard.IOutputExchangeItem item1);
        /// <summary>
        /// Create an instance of OpenMI.Standard.ILinkableComponent
        /// </summary>
        /// <param name="uriOmiV1">Uri of OMI XML</param>
        /// <param name="component1">Instance of OpenMI.Standard.ILinkableComponent</param>
        /// <param name="reports">Details about method success</param>
        /// <returns>True if successful</returns>
        public static bool InstantiateComponent1(Uri uriOmiV1, out OpenMI.Standard.ILinkableComponent component1, List<IReport> reports)
        {
            component1 = null;
            XElement xLinkableComponent;
            List<Utilities.Standard1.Argument1> args1;

            if (!UpdateArgumentsFromOmiV1(uriOmiV1, out xLinkableComponent, out args1, reports))
                return false;

            var assembly = Utilities.Xml.GetAttribute(xLinkableComponent, "Assembly");
            var type = Utilities.Xml.GetAttribute(xLinkableComponent, "Type");

            var omiFile = new DocumentExistingFile(uriOmiV1);
            var assemblyUri = new Uri(uriOmiV1, assembly);

            var typeV1 = new ExternalType(omiFile);
            typeV1.Initialise(assemblyUri.LocalPath, type);

            Type tComponentV1;
            component1 = typeV1.CreateInstance(out tComponentV1) as OpenMI.Standard.ILinkableComponent;

            if (component1 == null)
            {
                reports.Add(Report.Error(Report.ResourceIds.Instantiation, tComponentV1.ToString(), string.Empty));
                return false;
            }

            return true;
        }
Ejemplo n.º 14
0
        public Element(OpenMI.Standard.IElementSet set, int nElement)
        {
            Identity = new Identity(set.GetElementID(nElement));

            int nV = set.GetVertexCount(nElement);
            int nF = set.GetFaceCount(nElement);

            X = new double[nV];
            Y = new double[nV];

            bool hasZ = set.ElementType == OpenMI.Standard.ElementType.XYZPoint
                || set.ElementType == OpenMI.Standard.ElementType.XYZLine
                || set.ElementType == OpenMI.Standard.ElementType.XYZPolyLine
                || set.ElementType == OpenMI.Standard.ElementType.XYZPolygon
                || set.ElementType == OpenMI.Standard.ElementType.XYZPolyhedron;

            if (hasZ)
                Z = new double[nV];

            for (int n = 0; n < nV; ++n)
            {
                X[n] = set.GetXCoordinate(nElement, n);
                Y[n] = set.GetYCoordinate(nElement, n);

                if (hasZ)
                    Z[n] = set.GetZCoordinate(nElement, n);
            }

            if (nF > 0)
            {
                Faces = new int[nF][];

                for (int n = 0; n < nF; ++n)
                    Faces[n] = set.GetFaceVertexIndices(nElement, n);
            }
        }