예제 #1
0
        internal Item(IntPtr ItemPointer, DFSBase DFS, int Number)
        {
            ItemNumber = Number;
            _dfs       = DFS;
            int item_type  = 0;
            int data_type  = 0;
            int value_type = 0;

            IntPtr name = new IntPtr();
            IntPtr Eum  = new IntPtr();

            this.ItemPointer = ItemPointer;
            DfsDLLAccess.dfsGetItemInfo_(ItemPointer, out item_type, ref name, ref Eum, out data_type);
            DfsDLLAccess.dfsGetItemValueType(ItemPointer, out value_type);
            NumberOfElements = (int)DfsDLLAccess.dfsGetItemElements(ItemPointer);


            valueType     = (DataValueType)value_type;
            _name         = (Marshal.PtrToStringAnsi(name));
            eumUnitString = Marshal.PtrToStringAnsi(Eum);
            if (item_type != 0)
            {
                _eumitem = (eumItem)item_type;
            }
        }
예제 #2
0
 protected void CopyItemInfo(DFSBase TemplateDFS)
 {
     for (int i = 0; i < TemplateDFS.Items.Count(); i++)
     {
         Items[i].Name      = TemplateDFS.Items[i].Name;
         Items[i].EumItem   = TemplateDFS.Items[i].EumItem;
         Items[i].EumUnit   = TemplateDFS.Items[i].EumUnit;
         Items[i].ValueType = TemplateDFS.Items[i].ValueType;
     }
 }
예제 #3
0
        public virtual void CopyFromTemplate(DFSBase dfs)
        {
            _timeAxis = dfs._timeAxis;
            if (dfs._timeAxis == TimeAxisType.CalendarEquidistant || dfs._timeAxis == TimeAxisType.TimeEquidistant)
            {
                this.TimeOfFirstTimestep = dfs.TimeOfFirstTimestep;
                this.TimeStep            = dfs.TimeStep;
            }
            this.DeleteValue = dfs.DeleteValue;

            if (DfsDLLWrapper.dfsIsFileCompressed(dfs._headerPointer))
            {
                var en = DfsDLLWrapper.dfsGetEncodeKeySize(dfs._headerPointer);

                int[] xkey = new int[en];
                int[] ykey = new int[en];
                int[] zkey = new int[en];

                DfsDLLWrapper.dfsGetEncodeKey(dfs._headerPointer, xkey, ykey, zkey);
                DfsDLLWrapper.dfsSetEncodeKey(_headerPointer, xkey, ykey, zkey, en);
            }
        }
예제 #4
0
        /// <summary>
        /// Sums the values of the items to the selected time interval and puts them in the new dfs file
        /// Assumes that the there are delete values at the same places in all items and timesteps!
        /// </summary>
        /// <param name="Items"></param>
        /// <param name="df"></param>
        /// <param name="SumTim"></param>
        public void TimeAggregation(int[] Items, DFSBase df, TimeInterval SumTim, int Tsteps, MathType mathtype)
        {
            Dictionary <int, float[]> BufferData = new Dictionary <int, float[]>();

            List <int> NonDeleteIndex = null;
            List <int> DeleteIndex    = null;

            //Initialize all items
            foreach (var j in Items)
            {
                BufferData[j] = new float[dfsdata.Count()];
            }


            DateTime LastPrint = TimeSteps[0];

            bool PrintNow = false;

            int tstepCounter = 0;

            //Loop the time steps
            for (int i = 0; i < NumberOfTimeSteps; i++)
            {
                tstepCounter++;
                switch (SumTim)
                {
                case TimeInterval.Year:
                    PrintNow = (LastPrint.Year + Tsteps == TimeSteps[i].Year);
                    break;

                case TimeInterval.Month:
                    int nextmonth = LastPrint.Month + Tsteps;
                    if (nextmonth > 12)
                    {
                        nextmonth -= 12;
                    }
                    PrintNow = (nextmonth == TimeSteps[i].Month);
                    break;

                case TimeInterval.Day:
                    PrintNow = ((TimeSteps[i].Subtract(LastPrint) >= TimeSpan.FromDays(Tsteps)));
                    break;

                default:
                    break;
                }

                //Now print summed values and empty buffer
                if (PrintNow)
                {
                    foreach (var j in Items)
                    {
                        if (mathtype == MathType.Average) //Average, and a division with the number of time steps is required
                        {
                            foreach (var n in NonDeleteIndex)
                            {
                                BufferData[j][n] = BufferData[j][n] / ((float)tstepCounter);
                            }
                        }

                        df.WriteItemTimeStep(df.NumberOfTimeSteps, j, BufferData[j]);

                        foreach (var n in NonDeleteIndex)
                        {
                            if (mathtype == MathType.Min)
                            {
                                BufferData[j][n] = float.MaxValue;
                            }
                            else if (mathtype == MathType.Max)
                            {
                                BufferData[j][n] = float.MinValue;
                            }
                            else
                            {
                                BufferData[j][n] = 0;
                            }
                        }
                    }
                    tstepCounter = 0;
                    LastPrint    = TimeSteps[i];
                    PrintNow     = false;
                }
                //Sum all items
                foreach (var j in Items)
                {
                    ReadItemTimeStep(i, j);
                    if (DeleteIndex == null) //For the first time step build a list of the non-delete values
                    {
                        DeleteIndex    = new List <int>();
                        NonDeleteIndex = new List <int>();
                        for (int k = 0; k < dfsdata.Count(); k++)
                        {
                            if (dfsdata[k] == DeleteValue)
                            {
                                DeleteIndex.Add(k);
                                foreach (var n in Items)
                                {
                                    BufferData[n][k] = dfsdata[k]; //Set the delete values for all items
                                }
                            }
                            else
                            {
                                NonDeleteIndex.Add(k);
                            }
                            foreach (var n in Items)
                            {
                                if (mathtype == MathType.Min)
                                {
                                    BufferData[n][k] = float.MaxValue;
                                }
                                else if (mathtype == MathType.Max)
                                {
                                    BufferData[n][k] = float.MinValue;
                                }
                                else
                                {
                                    BufferData[n][k] = 0;
                                }
                            }
                        }
                    }
                    var arr = BufferData[j];
                    foreach (int k in NonDeleteIndex)
                    {
                        if (mathtype == MathType.Min)
                        {
                            arr[k] = Math.Min(arr[k], dfsdata[k]);
                        }
                        else if (mathtype == MathType.Max)
                        {
                            arr[k] = Math.Max(arr[k], dfsdata[k]);
                        }
                        else
                        {
                            arr[k] += dfsdata[k];
                        }
                    }
                }
            }
            //print the last summed values
            foreach (var j in Items)
            {
                if (mathtype == MathType.Average) //If not sum it is average and a division with the number of time steps is required
                {
                    foreach (var n in NonDeleteIndex)
                    {
                        BufferData[j][n] = BufferData[j][n] / ((float)tstepCounter);
                    }
                }
                df.WriteItemTimeStep(df.NumberOfTimeSteps, j, BufferData[j]);
            }
        }