예제 #1
0
        private void _addDimensionVariables(DfsUtilities df_in, ucar.nc2.NetcdfFileWriteable newNetcdfFile, out ucar.nc2.Dimension timeDim, out ucar.nc2.Dimension xDim, out ucar.nc2.Dimension yDim)
        {
            timeDim = newNetcdfFile.addDimension(_settings.TimeAxisName, df_in.tAxis_nTSteps);
            xDim    = newNetcdfFile.addDimension(_settings.XAxisName, df_in.Items[0].nPointsX);
            yDim    = newNetcdfFile.addDimension(_settings.YAxisName, df_in.Items[0].nPointsY);

            java.util.ArrayList dims = new java.util.ArrayList();
            dims.add(timeDim);
            newNetcdfFile.addVariable(_settings.TimeAxisName, ucar.ma2.DataType.FLOAT, dims);

            string unit   = "";
            int    dtStep = (int)df_in.tAxis_dTStep;

            switch (dtStep)
            {
            case 31556926:
                unit = "years since ";
                break;

            case 2629743:
                unit = "months since ";
                break;

            case 604800:
                unit = "weeks since ";
                break;

            case 86400:
                unit = "days since ";
                break;

            case 3600:
                unit = "hours since ";
                break;

            case 60:
                unit = "minutes since ";
                break;

            case 1:
                unit = "seconds since ";
                break;

            default:
                unit = "seconds since ";
                break;
            }
            newNetcdfFile.addVariableAttribute(_settings.TimeAxisName, "units", unit + df_in.tAxis_StartDateStr + " " + df_in.tAxis_StartTimeStr);
            newNetcdfFile.addVariableAttribute(_settings.TimeAxisName, "long_name", "time");

            dims = new java.util.ArrayList();
            dims.add(xDim);
            newNetcdfFile.addVariable(_settings.XAxisName, ucar.ma2.DataType.FLOAT, dims);
            newNetcdfFile.addVariableAttribute(_settings.XAxisName, "units", "degrees east");//df_in.Items[0].axisEUMUnitString);
            newNetcdfFile.addVariableAttribute(_settings.XAxisName, "long_name", "longitude");
            newNetcdfFile.addVariableAttribute(_settings.XAxisName, "axis", "x");
            newNetcdfFile.addVariableAttribute(_settings.XAxisName, "DHIUnitName", df_in.Items[0].axisEUMUnitString);
            newNetcdfFile.addVariableAttribute(_settings.XAxisName, "projection", df_in.Projection);

            dims = new java.util.ArrayList();
            dims.add(yDim);
            newNetcdfFile.addVariable(_settings.YAxisName, ucar.ma2.DataType.FLOAT, dims);
            newNetcdfFile.addVariableAttribute(_settings.YAxisName, "units", "degrees north");//df_in.Items[0].axisEUMUnitString);
            newNetcdfFile.addVariableAttribute(_settings.YAxisName, "long_name", "latitude");
            newNetcdfFile.addVariableAttribute(_settings.YAxisName, "axis", "y");
            newNetcdfFile.addVariableAttribute(_settings.YAxisName, "DHIUnitName", df_in.Items[0].axisEUMUnitString);
            newNetcdfFile.addVariableAttribute(_settings.YAxisName, "projection", df_in.Projection);
        }
예제 #2
0
        private void _writeDimensionData(DfsUtilities df_in, ucar.nc2.NetcdfFileWriteable newNetcdfFile)
        {
            //time
            ucar.ma2.ArrayDouble timeDataArr = new ucar.ma2.ArrayDouble.D1(df_in.tAxis_nTSteps);

            int dtStep    = (int)df_in.tAxis_dTStep;
            int multiples = 1;

            switch (dtStep) //todo: to add multiples of other time units. now only seconds is supported
            {
            case 31556926:
                break;

            case 2629743:
                break;

            case 604800:
                break;

            case 86400:
                break;

            case 3600:
                break;

            case 60:
                break;

            case 1:
                break;

            default:
                multiples = dtStep / 1;
                break;
            }

            for (int i = 0; i < df_in.tAxis_nTSteps; i++)
            {
                double timeStepValue;
                if (df_in.tAxis_nTSteps == 1)
                {
                    timeStepValue = dtStep / dtStep * multiples;
                }
                else
                {
                    timeStepValue = (df_in.tAxis_dTStep / dtStep) * i * multiples; //convert to hours or days or whatever
                }
                timeDataArr.setDouble(i, timeStepValue);
            }
            newNetcdfFile.write(_settings.TimeAxisName, timeDataArr);

            //lon
            ucar.ma2.ArrayDouble xDataArr = new ucar.ma2.ArrayDouble.D1(df_in.Items[0].nPointsX);
            for (int i = 0; i < df_in.Items[0].nPointsX; i++)
            {
                double xValue = df_in.Longitude + df_in.Items[0].DX * i;
                xDataArr.setDouble(i, xValue);
            }
            newNetcdfFile.write(_settings.XAxisName, xDataArr);

            //lat
            ucar.ma2.ArrayDouble yDataArr = new ucar.ma2.ArrayDouble.D1(df_in.Items[0].nPointsY);
            for (int i = 0; i < df_in.Items[0].nPointsY; i++)
            {
                double yValue = df_in.Latitude + df_in.Items[0].DY * i;
                yDataArr.setDouble(i, yValue);
            }
            newNetcdfFile.write(_settings.YAxisName, yDataArr);
        }