コード例 #1
0
ファイル: NetCDFReaderHelper.cs プロジェクト: kwende/wrfsharp
 public static void ReadGridDimensions(INetCDFReader reader, out float westEastGridDimension,
                                       out float southNorthGridDimension, out float bottomTopGridDimension)
 {
     westEastGridDimension   = reader.ReadFloatAttribute("WEST-EAST_GRID_DIMENSION");
     southNorthGridDimension = reader.ReadFloatAttribute("SOUTH-NORTH_GRID_DIMENSION");
     bottomTopGridDimension  = reader.ReadFloatAttribute("BOTTOM-TOP_GRID_DIMENSION");
 }
コード例 #2
0
ファイル: NetCDFReaderHelper.cs プロジェクト: kwende/wrfsharp
        public static DateTime GetSimulationDate(INetCDFReader reader)
        {
            //Example: 2016-11-12_12:00:00
            CultureInfo provider         = CultureInfo.InvariantCulture;
            string      dateTimeAsString = reader.ReadStringAttribute("SIMULATION_START_DATE");

            return(DateTime.ParseExact(dateTimeAsString, "yyyy-MM-dd_HH:mm:ss", provider));
        }
コード例 #3
0
        public static void RecordVariables(INetCDFReader iNetCdfReader, IDatabase iDatabase,
                                           string runId, float minLon, float maxLon, float minLat, float maxLat)
        {
            VariableRecord[] records =
                NetCDFReaderHelper.GetVariableRecords(iNetCdfReader, minLat, maxLat, minLon, maxLon);

            iDatabase.SaveVariableRecord(runId, records);
        }
コード例 #4
0
        public static void CreateRunRecord(INetCDFReader iNetCdf, IDatabase iDatabase,
                                           DateTime startDate, DateTime endDate, string runId)
        {
            DateTime simulationStartDate = NetCDFReaderHelper.GetSimulationDate(iNetCdf);

            float westEast = 0, southNorth = 0, bottomTop = 0;

            NetCDFReaderHelper.ReadGridDimensions(iNetCdf, out westEast, out southNorth, out bottomTop);

            PhysicsConfigurationProcessed physics =
                NetCDFReaderHelper.ReadPhysicsSettings(iNetCdf);

            iDatabase.SaveRun(startDate, endDate, simulationStartDate,
                              westEast, southNorth, bottomTop,
                              physics, runId);
        }
コード例 #5
0
ファイル: NetCDFReaderHelper.cs プロジェクト: kwende/wrfsharp
        public static PhysicsConfigurationProcessed ReadPhysicsSettings(INetCDFReader reader)
        {
            PhysicsConfigurationProcessed ret = new PhysicsConfigurationProcessed();

            ret.Bldt               = reader.ReadFloatAttribute("BLDT");
            ret.BlPblPhysics       = reader.ReadFloatAttribute("BL_PBL_PHYSICS");
            ret.Cudt               = reader.ReadFloatAttribute("CUDT");
            ret.CuPhysics          = reader.ReadFloatAttribute("CU_PHYSICS");
            ret.ICloud             = 0; // ?
            ret.IfSnow             = 0; // ?
            ret.IsFflx             = reader.ReadFloatAttribute("ISFFLX");
            ret.MpPhysics          = reader.ReadFloatAttribute("MP_PHYSICS");
            ret.NumSoilLayers      = 0; // ?
            ret.Radt               = reader.ReadFloatAttribute("RADT");
            ret.RaLwPhysics        = reader.ReadFloatAttribute("RA_LW_PHYSICS");
            ret.RaSwPhysics        = reader.ReadFloatAttribute("RA_SW_PHYSICS");
            ret.SfSfClayPhysics    = reader.ReadFloatAttribute("SF_SFCLAY_PHYSICS");
            ret.SfSurfacePhysics   = reader.ReadFloatAttribute("SF_SURFACE_PHYSICS");
            ret.SfUrbanPhysics     = reader.ReadFloatAttribute("SF_URBAN_PHYSICS");
            ret.SurfaceInputSource = reader.ReadFloatAttribute("SURFACE_INPUT_SOURCE");

            return(ret);
        }
コード例 #6
0
ファイル: NetCDFReaderHelper.cs プロジェクト: kwende/wrfsharp
        public static VariableRecord[] GetVariableRecords(INetCDFReader reader, float minLat,
                                                          float maxLat, float minLon, float maxLon)
        {
            float[][][] lats            = reader.Read3DFloatArray("XLAT");
            float[][][] lons            = reader.Read3DFloatArray("XLONG");
            float[][][] rainc           = reader.Read3DFloatArray("RAINC");
            float[][][] rainnc          = reader.Read3DFloatArray("RAINNC");
            float[][][] tc2             = reader.Read3DFloatArray("T2");
            float[][][] snowh           = reader.Read3DFloatArray("SNOWH");
            float[][][] surfacePressure = reader.Read3DFloatArray("PSFC");
            float[][][] surfaceSkinTemp = reader.Read3DFloatArray("TSK");
            float[][][] u10             = reader.Read3DFloatArray("U10");
            float[][][] v10             = reader.Read3DFloatArray("V10");
            float[][][] cloudFraction   = reader.Read3DFloatArray("CLDFRA");

            DateTime[] dates = reader.ReadDateArray("Times");

            //tc2 = tc2-273.16                  ; T2 in C
            //tf2 = 1.8*tc2+32.                    ; Turn temperature into Fahrenheit

            List <VariableRecord> ret = new List <VariableRecord>();

            for (int t = 0; t < dates.Length; t++)
            {
                DateTime date = dates[t];
                for (int y = 0; y < lats.Length; y++)
                {
                    for (int x = 0; x < lons.Length; x++)
                    {
                        float lat = lats[t][y][x];
                        float lon = lons[t][y][x];

                        if (lat > minLat && lat < maxLat &&
                            lon < maxLon && lon > minLon)
                        {
                            float tempInK = tc2[t][y][x];
                            float tempInC = tempInK - 273.16f;
                            float tempInF = 1.8f * tempInC + 32;

                            float skinTempInK = surfaceSkinTemp[t][y][x];
                            float skinTempInC = skinTempInK - 273.16f;
                            float skinTempInF = 1.8f * skinTempInC + 32;

                            VariableRecord rec = new VariableRecord
                            {
                                DateTime               = date,
                                Lat                    = lat,
                                Lon                    = lon,
                                PrecipInMM             = rainc[t][y][x] + rainnc[t][y][x],
                                TempInF                = tempInF,
                                SnowDepthInM           = snowh[t][y][x],
                                SurfacePressure        = surfacePressure[t][y][x],
                                SurfaceSkinTemperature = skinTempInF,
                                UWind                  = u10[t][y][x],
                                VWind                  = v10[t][y][x],
                                //CloudFraction = cloudFraction[t][y][x],
                            };

                            ret.Add(rec);
                        }
                    }
                }
            }

            return(ret.ToArray());
        }