コンテンツにスキップ

FAQ/ 降雨補正倍率を一部期間のみ設定

降雨補正倍率を一部期間のみ設定したいです。方法はありますか。

DioVISTA の 降雨補正倍率 だと、全期間に対する引き伸ばし倍率を与えられることはわかっています。今回は、一部期間のみの引き伸ばしをしたいです。

DIASからX-RAINをダウンロードしました。 XRAINのデータを 日立パワーソリューションズより提供されたツール Grib2ToNetcdf.exe で netCDF 形式に変換しました。 この netCDF 形式の降雨データのうち、一部期間の降雨を 1.2 倍に引き延ばしたいです。

回答

ご要望の netCDF ファイルを作成する python スクリプトを作成しました。

  1. 下記のコードを ScalingRainfall.py として保存します。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    import sys
    import netCDF4 as nc
    import datetime as dt
    
    ncFileName = sys.argv[1]
    rainfallScalingFactor = float(sys.argv[2])
    scalingFirstTime = dt.datetime.strptime(sys.argv[3], "%Y-%m-%d %H:%M")
    scalingLastTime = dt.datetime.strptime(sys.argv[4], "%Y-%m-%d %H:%M")
    
    ncFile = nc.Dataset(ncFileName, mode="r")
    rainfall = ncFile.variables["precip"]
    time = ncFile.variables["time"]
    
    outputFile = f'{ncFileName[:-3]}_{int(rainfallScalingFactor * 100):03d}.nc'
    outNcFile = nc.Dataset(outputFile, mode="w", format="NETCDF4_CLASSIC")
    
    for dim in ncFile.dimensions.values():
        outNcFile.createDimension(dim.name, dim.size)
    for att in ncFile.ncattrs():
        outNcFile.setncattr(att, ncFile.getncattr(att))
    
    for varName in ("time", "lat","lon","precip"):
        origVar = ncFile.variables[varName]
        if varName == "precip":
            chunksizes = (1, ncFile.dimensions['lat'].size, ncFile.dimensions['lon'].size)
            compression = 'zlib'
            complevel = 6
        else:
            chunksizes = None
            compression = None
            complevel = None
        ncVar = outNcFile.createVariable(varName, origVar.datatype, origVar.dimensions, chunksizes=chunksizes, compression=compression, complevel=complevel)
        ncVar.setncatts({att: origVar.getncattr(att) for att in origVar.ncattrs()})
        ncVar[:] = ncFile.variables[varName][:]
    
    outputRainfall = outNcFile.variables["precip"]
    for i in range(len(time)):
        t = dt.datetime.utcfromtimestamp(time[i])
        if scalingFirstTime <= t <= scalingLastTime:
            outputRainfall[i,:,:] = rainfall[i,:,:] * rainfallScalingFactor
    
    ncFile.close()
    outNcFile.close()
    print(f"save {outputFile}")
    
  2. 次のように呼び出します。

    例: "KINKI00001-20130915-0000-G000-EL000000.nc" ファイルの、"2013-09-15 13:00" から "2013-09-16 13:00" までの期間の降雨を 0.41 倍に引き伸ばす場合(時刻はUTC表記です)。

    1
    python.exe ScalingRainfall.py "KINKI00001-20130915-0000-G000-EL000000.nc" 0.41 "2013-09-15 13:00" "2013-09-16 13:00"
    

関連情報


最終更新日: 2023-12-26