public InputSpatialSurrogate(ITimeSpaceInput input)
        {
            _inputOriginal = input;

            if (input == null)
            {
                SetDescribes(new Describes("Unspecified Input"));
                ValueDefinition = new ValueDefinition();
                SpatialDefinition = new SpatialDefinition();
                Component = null;
            }
            else
            {
                SetDescribes(input);

                ValueDefinition = input.ValueDefinition;
                Component = input.Component;

                var inputTime = input as BaseInputSpaceTime;

                SpatialDefinition = inputTime != null
                    ? inputTime.SpatialDefinition
                    : new SpatialDefinition();
            }
        }
        public OrphanedInputSpaceTime()
        {
            var describes = new Describes("Temporal Target", "= Temporal Target");
            SetIdentity(new Identity("FluidEarth2.Sdk.OrphanedInputSpaceTime", describes));

            Component = null;

            ValueDefinition = new ValueDefinition();
            SpatialDefinition = new SpatialDefinition();

            TimeSet = new TimeSet();
        }
        protected override void DoInitialise(bool reinitialising)
        {
            base.DoInitialise(reinitialising);

            if (reinitialising)
            {
                return;
            }

            var cellId = new Identity[1];
            var id = "Center";
            cellId[0] = new Identity(id, id, id);
            var cellX = new double[1];
            var cellY = new double[1];
            cellX[0] = 0.0;
            cellY[0] = 0.0;

            var spatialCenter = new SpatialDefinition(new Describes("Center", string.Format("Center ({0};{1})", cellX, cellY)), cellId.Count());
            var center = new ElementSetPoints(spatialCenter, cellId, cellX, cellY);

            // outputs
            var converterX = new ValueSetConverterTimeEngineDouble("_X", double.NegativeInfinity, 1, ValueSetConverterTimeRecordBase<double>.InterpolationTemporal.Linear);
            var outX = new OutputSpaceTime(GetIdentity(OutputIdentity.X), QuantitiesSI.Length("X"), center, this, converterX);
            Add(outX);
            var converterY = new ValueSetConverterTimeEngineDouble("_Y", double.NegativeInfinity, 1, ValueSetConverterTimeRecordBase<double>.InterpolationTemporal.Linear);
            var outY = new OutputSpaceTime(GetIdentity(OutputIdentity.Y), QuantitiesSI.Length("Y"), center, this, converterY);
            Add(outY);
            var converterZ = new ValueSetConverterTimeEngineDouble("_Z", double.NegativeInfinity, 1, ValueSetConverterTimeRecordBase<double>.InterpolationTemporal.Linear);
            var outZ = new OutputSpaceTime(GetIdentity(OutputIdentity.Z), QuantitiesSI.Length("Z"), center, this, converterZ);
            Add(outZ);

            // inputs
            var converterA = new ValueSetConverterTimeEngineDouble("_A", double.NegativeInfinity, 1, ValueSetConverterTimeRecordBase<double>.InterpolationTemporal.Linear);
            var inA = new InputSpaceTime(GetIdentity(InputIdentity.A), QuantitiesSI.Length("A"), center, this, converterA);
            Add(inA);
            var inB = new InputSpaceTime(GetIdentity(InputIdentity.B), QuantitiesSI.Length("B"), center, this, converterA);
            Add(inB);
            var inC = new InputSpaceTime(GetIdentity(InputIdentity.C), QuantitiesSI.Length("C"), center, this, converterA);
            Add(inC);
        }