def harvest_and_save_blindern(from_string, to_string):

    stnr_met_blind = 18700          # Blindern (met)
    from_date = dt.datetime.strptime(from_string, "%Y-%m-%d")
    to_date = dt.datetime.strptime(to_string, "%Y-%m-%d")
    #elems_blind = gws.getElementsFromTimeserieTypeStation(stnr_met_blind, 2, output='csv')

    rr = gws.getMetData(stnr_met_blind, 'RR', from_date, to_date, 0, output='raw list')
    rr = we.millimeter_from_meter(rr)
    rr_test_message = we.test_for_missing_elements(rr, from_date, to_date)

    tam = gws.getMetData(stnr_met_blind, 'TAM', from_date, to_date, 0, output='raw list')
    tam_test_message = we.test_for_missing_elements(tam, from_date, to_date)

    nnm = gws.getMetData(stnr_met_blind, 'NNM', from_date, to_date, 0, output='raw list')
    nnm_test_message = we.test_for_missing_elements(nnm, from_date, to_date)

    file_name = '{2}RR TAM NNM Blindern 18700 {0} to {1}.txt'.format(from_string, to_string, env.data_path)

    WSYS = "github/Ice-modelling/rundataharvester.py"
    OPER = "Ragnar Ekker"
    DCHA = ['RR  [mm/day]          on Blindern 18700 from eklima.met.no',
            'TAM [C]     daily avg on Blindern 18700 from eklima.met.no',
            'NNM [%/100] daily avg on Blindern 18700 from eklima.met.no']

    mfd.write_vardat2(file_name, [rr, tam, nnm], WSYS, OPER, DCHA)

    return
def harvest_and_save_nordnesfjelet(from_string, to_string):

    stnr = 91500          # Nordnesfjellet (met)
    from_date = dt.datetime.strptime(from_string, "%Y-%m-%d")
    to_date = dt.datetime.strptime(to_string, "%Y-%m-%d")
    #elems_blind = gws.getElementsFromTimeserieTypeStation(stnr, 2, output='csv')

    qli = gws.getMetData(stnr, 'QLI', from_date, to_date, 2, output='raw list')
    qli_test_message = we.test_for_missing_elements(qli, from_date, to_date, time_step=60*60)

    ta = gws.getMetData(stnr, 'ta', from_date, to_date, 2, output='raw list')
    ta_test_message = we.test_for_missing_elements(ta, from_date, to_date, time_step=3600)

    rr_1 = gws.getMetData(stnr, 'rr_1', from_date, to_date, 2, output='raw list')
    rr_1 = we.millimeter_from_meter(rr_1)
    rr_test_message = we.test_for_missing_elements(rr_1, from_date, to_date, time_step=3600)

    file_name = '{2}QLI TA RR Nordnesfjellet 91500 {0} to {1}.txt'.format(from_string, to_string, env.data_path)

    WSYS = "github/Ice-modelling/rundataharvester.py"
    OPER = "Ragnar Ekker"
    DCHA = ['QLI  [Wh/m2] avg pr hr on Nordnesfjellet 91500 from eklima.met.no',
            'TA   [C]     avg pr hr on Nordnesfjellet 91500 from eklima.met.no',
            'RR_1 [mm/hr]           on Nordnesfjellet 91500 from eklima.met.no']

    mfd.write_vardat2(file_name, [qli, ta, rr_1], WSYS, OPER, DCHA)

    return
Beispiel #3
0
def run_semsvann_eb(startDate, endDate):
    # TODO: get coordinates from the ObsLocation in regObs
    location_name = 'Semsvannet v/Lo 145 moh'

    wsTemp = gws.getMetData(19710, 'TAM', startDate, endDate, 0, 'list')
    wsSno = gws.getMetData(19710, 'SA', startDate, endDate, 0, 'list')
    wsPrec = gws.getMetData(19710, 'RR', startDate, endDate, 0, 'list')
    wsWind = gws.getMetData(18700, 'FFM', startDate, endDate, 0, 'list')
    wsCC = gws.getMetData(18700, 'NNM', startDate, endDate, 0, 'list')

    utm33_y = 6644410
    utm33_x = 243940

    temp, date = we.strip_metadata(wsTemp, get_date_times=True)
    sno_tot = we.strip_metadata(wsSno)
    prec_snow = dp.delta_snow_from_total_snow(sno_tot)
    prec = we.strip_metadata(wsPrec)
    wind = we.strip_metadata(wsWind)
    cloud_cover = we.strip_metadata(wsCC)
    rel_hum = [const.rel_hum_air] * len(date)
    pressure_atm = [const.pressure_atm] * len(date)

    observed_ice = gro.get_all_season_ice_on_location(location_name, startDate,
                                                      endDate)

    ice_cover, energy_balance = it.calculate_ice_cover_eb(
        utm33_x,
        utm33_y,
        date,
        temp,
        prec,
        prec_snow,
        cloud_cover=cloud_cover,
        wind=wind,
        rel_hum=rel_hum,
        pressure_atm=pressure_atm,
        inn_column=copy.deepcopy(observed_ice[0]))

    # Need datetime objects from now on
    from_date = dt.datetime.strptime(startDate, "%Y-%m-%d")
    to_date = dt.datetime.strptime(endDate, "%Y-%m-%d")

    plot_filename = '{0}Semsvann EB {1}-{2}.png'.format(
        se.plot_folder, from_date.year, to_date.year)
    # pts.plot_ice_cover(ice_cover, observed_ice, date, temp, sno_tot, plot_filename)
    plot_filename = '{0}Semsvann MET with EB {1}-{2}.png'.format(
        se.plot_folder, from_date.year, to_date.year)
    pts.plot_ice_cover_eb(ice_cover,
                          energy_balance,
                          observed_ice,
                          date,
                          temp,
                          sno_tot,
                          plot_filename,
                          prec=prec,
                          wind=wind,
                          clouds=cloud_cover)
Beispiel #4
0
def run_otrovann_eb(startDate, endDate):

    location_name = 'Otrøvatnet v/Nystuen 971 moh'
    wsTemp = gws.getMetData(54710, 'TAM', startDate, endDate, 0, 'list')
    wsSno = gws.getMetData(54710, 'SA', startDate, endDate, 0, 'list')
    wsPrec = gws.getMetData(54710, 'RR', startDate, endDate, 0, 'list')

    utm33_y = 6802070
    utm33_x = 130513

    temp, date = we.strip_metadata(wsTemp, get_date_times=True)
    sno_tot = we.strip_metadata(wsSno)
    prec_snow = dp.delta_snow_from_total_snow(sno_tot)
    prec = we.strip_metadata(wsPrec)
    cloud_cover = dp.clouds_from_precipitation(prec)
    wind = [const.avg_wind_const] * len(date)
    rel_hum = [const.rel_hum_air] * len(date)
    pressure_atm = [const.pressure_atm] * len(date)

    # available_elements = gws.getElementsFromTimeserieTypeStation(54710, 0, 'csv')
    observed_ice = gro.get_all_season_ice_on_location(location_name, startDate,
                                                      endDate)

    ice_cover, energy_balance = it.calculate_ice_cover_eb(
        utm33_x,
        utm33_y,
        date,
        temp,
        prec,
        prec_snow,
        cloud_cover,
        wind,
        rel_hum=rel_hum,
        pressure_atm=pressure_atm,
        inn_column=copy.deepcopy(observed_ice[0]))

    # Need datetime objects from now on
    from_date = dt.datetime.strptime(startDate, "%Y-%m-%d")
    to_date = dt.datetime.strptime(endDate, "%Y-%m-%d")

    plot_filename = '{0}Ortovann MET EB {1}-{2}.png'.format(
        se.plot_folder, from_date.year, to_date.year)
    # pts.plot_ice_cover(ice_cover, observed_ice, date, temp, sno_tot, plot_filename)
    plot_filename = '{0}Ortovann MET with EB {1}-{2}.png'.format(
        se.plot_folder, from_date.year, to_date.year)
    pts.plot_ice_cover_eb(ice_cover,
                          energy_balance,
                          observed_ice,
                          date,
                          temp,
                          sno_tot,
                          plot_filename,
                          prec=prec,
                          wind=wind,
                          clouds=cloud_cover)
def __test_clouds_from_short_wave():

    date_list = [dt.date.today() - dt.timedelta(days=x) for x in range(0, 365)]
    date_list = [
        dt.datetime.combine(d, dt.datetime.min.time()) for d in date_list
    ]
    date_list.reverse()

    # test Nordnesfjellet i Troms
    station_id = 91500
    short_wave_id = 'QSI'
    long_wave_id = 'QLI'
    temperature_id = 'TA'
    timeseries_type = 2
    utm_e = 711075
    utm_n = 7727719

    short_wave = gws.getMetData(station_id, short_wave_id, date_list[0],
                                date_list[-1], timeseries_type)
    long_wave = gws.getMetData(station_id, long_wave_id, date_list[0],
                               date_list[-1], timeseries_type)
    temperature = gws.getMetData(station_id, temperature_id, date_list[0],
                                 date_list[-1], timeseries_type)

    short_wave = we.fix_data_quick(short_wave)
    long_wave = we.fix_data_quick(long_wave)
    temperature_daily = we.fix_data_quick(temperature)

    short_wave_daily = we.make_daily_average(short_wave)
    short_wave_daily = we.multiply_constant(
        short_wave_daily,
        24 * 3600 / 1000)  # Wh/m2 * 3600 s/h * kJ/1000J (energy) over 24hrs
    long_wave_daily = we.make_daily_average(long_wave)
    long_wave_daily = we.multiply_constant(long_wave_daily, 24 * 3600 / 1000)
    temperature_daily = we.make_daily_average(temperature)

    Short_wave_list = we.strip_metadata(short_wave_daily)
    I_clear_sky_list = [
        irradiance_clear_sky(utm_e, utm_n, d) for d in date_list
    ]
    Cloud_cover = clouds_from_short_wave(utm_e, utm_n, Short_wave_list,
                                         date_list)

    import matplotlib.pyplot as plt

    plt.plot(date_list, Short_wave_list)
    plt.plot(date_list, I_clear_sky_list)
    plt.plot(date_list, Cloud_cover)
    plt.ylim(0, 50000)
    plt.show()
Beispiel #6
0
def harvest_and_save_blindern(from_string, to_string):

    stnr_met_blind = 18700  # Blindern (met)
    from_date = dt.datetime.strptime(from_string, "%Y-%m-%d")
    to_date = dt.datetime.strptime(to_string, "%Y-%m-%d")
    #elems_blind = gws.getElementsFromTimeserieTypeStation(stnr_met_blind, 2, output='csv')

    rr = gws.getMetData(stnr_met_blind,
                        'RR',
                        from_date,
                        to_date,
                        0,
                        output='raw list')
    rr = we.millimeter_from_meter(rr)
    rr_test_message = we.test_for_missing_elements(rr, from_date, to_date)

    tam = gws.getMetData(stnr_met_blind,
                         'TAM',
                         from_date,
                         to_date,
                         0,
                         output='raw list')
    tam_test_message = we.test_for_missing_elements(tam, from_date, to_date)

    nnm = gws.getMetData(stnr_met_blind,
                         'NNM',
                         from_date,
                         to_date,
                         0,
                         output='raw list')
    nnm_test_message = we.test_for_missing_elements(nnm, from_date, to_date)

    file_name = '{2}RR TAM NNM Blindern 18700 {0} to {1}.txt'.format(
        from_string, to_string, env.data_path)

    WSYS = "github/Ice-modelling/rundataharvester.py"
    OPER = "Ragnar Ekker"
    DCHA = [
        'RR  [mm/day]          on Blindern 18700 from eklima.met.no',
        'TAM [C]     daily avg on Blindern 18700 from eklima.met.no',
        'NNM [%/100] daily avg on Blindern 18700 from eklima.met.no'
    ]

    mfd.write_vardat2(file_name, [rr, tam, nnm], WSYS, OPER, DCHA)

    return
Beispiel #7
0
def harvest_and_save_nordnesfjelet(from_string, to_string):

    stnr = 91500  # Nordnesfjellet (met)
    from_date = dt.datetime.strptime(from_string, "%Y-%m-%d")
    to_date = dt.datetime.strptime(to_string, "%Y-%m-%d")
    #elems_blind = gws.getElementsFromTimeserieTypeStation(stnr, 2, output='csv')

    qli = gws.getMetData(stnr, 'QLI', from_date, to_date, 2, output='raw list')
    qli_test_message = we.test_for_missing_elements(qli,
                                                    from_date,
                                                    to_date,
                                                    time_step=60 * 60)

    ta = gws.getMetData(stnr, 'ta', from_date, to_date, 2, output='raw list')
    ta_test_message = we.test_for_missing_elements(ta,
                                                   from_date,
                                                   to_date,
                                                   time_step=3600)

    rr_1 = gws.getMetData(stnr,
                          'rr_1',
                          from_date,
                          to_date,
                          2,
                          output='raw list')
    rr_1 = we.millimeter_from_meter(rr_1)
    rr_test_message = we.test_for_missing_elements(rr_1,
                                                   from_date,
                                                   to_date,
                                                   time_step=3600)

    file_name = '{2}QLI TA RR Nordnesfjellet 91500 {0} to {1}.txt'.format(
        from_string, to_string, env.data_path)

    WSYS = "github/Ice-modelling/rundataharvester.py"
    OPER = "Ragnar Ekker"
    DCHA = [
        'QLI  [Wh/m2] avg pr hr on Nordnesfjellet 91500 from eklima.met.no',
        'TA   [C]     avg pr hr on Nordnesfjellet 91500 from eklima.met.no',
        'RR_1 [mm/hr]           on Nordnesfjellet 91500 from eklima.met.no'
    ]

    mfd.write_vardat2(file_name, [qli, ta, rr_1], WSYS, OPER, DCHA)

    return
def __test_clouds_from_short_wave():

    date_list = [dt.date.today() - dt.timedelta(days=x) for x in range(0, 365)]
    date_list = [dt.datetime.combine(d, dt.datetime.min.time()) for d in date_list]
    date_list.reverse()

    # test Nordnesfjellet i Troms
    station_id = 91500
    short_wave_id = 'QSI'
    long_wave_id = 'QLI'
    temperature_id = 'TA'
    timeseries_type = 2
    utm_e = 711075
    utm_n = 7727719

    short_wave = gws.getMetData(station_id, short_wave_id, date_list[0], date_list[-1], timeseries_type)
    long_wave = gws.getMetData(station_id, long_wave_id, date_list[0], date_list[-1], timeseries_type)
    temperature = gws.getMetData(station_id, temperature_id, date_list[0], date_list[-1], timeseries_type)

    short_wave = we.fix_data_quick(short_wave)
    long_wave = we.fix_data_quick(long_wave)
    temperature_daily = we.fix_data_quick(temperature)

    short_wave_daily = we.make_daily_average(short_wave)
    short_wave_daily = we.multiply_constant(short_wave_daily, 24 * 3600 / 1000)  # Wh/m2 * 3600 s/h * kJ/1000J (energy) over 24hrs
    long_wave_daily = we.make_daily_average(long_wave)
    long_wave_daily = we.multiply_constant(long_wave_daily, 24 * 3600 / 1000)
    temperature_daily = we.make_daily_average(temperature)

    Short_wave_list = we.strip_metadata(short_wave_daily)
    I_clear_sky_list = [irradiance_clear_sky(utm_e, utm_n, d) for d in date_list]
    Cloud_cover = clouds_from_short_wave(utm_e, utm_n, Short_wave_list, date_list)

    import matplotlib.pyplot as plt

    plt.plot(date_list, Short_wave_list)
    plt.plot(date_list, I_clear_sky_list)
    plt.plot(date_list, Cloud_cover)
    plt.ylim(0, 50000)
    plt.show()
Beispiel #9
0
def run_semsvann_eb(startDate, endDate):
    # TODO: get coordinates from the ObsLocation in regObs
    location_name = 'Semsvannet v/Lo 145 moh'

    wsTemp = gws.getMetData(19710, 'TAM', startDate, endDate, 0, 'list')
    wsSno = gws.getMetData(19710, 'SA', startDate, endDate, 0, 'list')
    wsPrec = gws.getMetData(19710, 'RR', startDate, endDate, 0, 'list')
    wsWind = gws.getMetData(18700, 'FFM', startDate, endDate, 0, 'list')
    wsCC = gws.getMetData(18700, 'NNM', startDate, endDate, 0, 'list')

    utm33_y = 6644410
    utm33_x = 243940

    temp, date = we.strip_metadata(wsTemp, get_date_times=True)
    sno_tot = we.strip_metadata(wsSno)
    prec_snow = dp.delta_snow_from_total_snow(sno_tot)
    prec = we.strip_metadata(wsPrec)
    wind = we.strip_metadata(wsWind)
    cloud_cover = we.strip_metadata(wsCC)
    rel_hum = [const.rel_hum_air] * len(date)
    pressure_atm = [const.pressure_atm] * len(date)

    observed_ice = gro.get_all_season_ice_on_location(location_name, startDate, endDate)

    ice_cover, energy_balance = it.calculate_ice_cover_eb(
        utm33_x, utm33_y, date,
        temp, prec, prec_snow, cloud_cover=cloud_cover, wind=wind, rel_hum=rel_hum, pressure_atm=pressure_atm,
        inn_column=copy.deepcopy(observed_ice[0]))

    # Need datetime objects from now on
    from_date = dt.datetime.strptime(startDate, "%Y-%m-%d")
    to_date = dt.datetime.strptime(endDate, "%Y-%m-%d")

    plot_filename = '{0}Semsvann EB {1}-{2}.png'.format(se.plot_folder, from_date.year, to_date.year)
    # pts.plot_ice_cover(ice_cover, observed_ice, date, temp, sno_tot, plot_filename)
    plot_filename = '{0}Semsvann MET with EB {1}-{2}.png'.format(se.plot_folder, from_date.year, to_date.year)
    pts.plot_ice_cover_eb(ice_cover, energy_balance, observed_ice, date, temp, sno_tot, plot_filename, prec=prec, wind=wind, clouds=cloud_cover)
Beispiel #10
0
def run_otrovann_eb(startDate, endDate):

    location_name = 'Otrøvatnet v/Nystuen 971 moh'
    wsTemp = gws.getMetData(54710, 'TAM', startDate, endDate, 0, 'list')
    wsSno  = gws.getMetData(54710, 'SA',  startDate, endDate, 0, 'list')
    wsPrec = gws.getMetData(54710, 'RR',  startDate, endDate, 0, 'list')

    utm33_y = 6802070
    utm33_x = 130513

    temp, date = we.strip_metadata(wsTemp, get_date_times=True)
    sno_tot = we.strip_metadata(wsSno)
    prec_snow = dp.delta_snow_from_total_snow(sno_tot)
    prec = we.strip_metadata(wsPrec)
    cloud_cover = dp.clouds_from_precipitation(prec)
    wind = [const.avg_wind_const] * len(date)
    rel_hum = [const.rel_hum_air] * len(date)
    pressure_atm = [const.pressure_atm] * len(date)


    # available_elements = gws.getElementsFromTimeserieTypeStation(54710, 0, 'csv')
    observed_ice = gro.get_all_season_ice_on_location(location_name, startDate, endDate)

    ice_cover, energy_balance = it.calculate_ice_cover_eb(
        utm33_x, utm33_y, date, temp, prec, prec_snow, cloud_cover, wind, rel_hum=rel_hum, pressure_atm=pressure_atm,
        inn_column=copy.deepcopy(observed_ice[0]))

    # Need datetime objects from now on
    from_date = dt.datetime.strptime(startDate, "%Y-%m-%d")
    to_date = dt.datetime.strptime(endDate, "%Y-%m-%d")

    plot_filename = '{0}Ortovann MET EB {1}-{2}.png'.format(se.plot_folder, from_date.year, to_date.year)
    # pts.plot_ice_cover(ice_cover, observed_ice, date, temp, sno_tot, plot_filename)
    plot_filename = '{0}Ortovann MET with EB {1}-{2}.png'.format(se.plot_folder, from_date.year, to_date.year)
    pts.plot_ice_cover_eb(ice_cover, energy_balance, observed_ice, date, temp, sno_tot, plot_filename,
                       prec=prec, wind=wind, clouds=cloud_cover)
Beispiel #11
0
def run_mosselva(from_date,
                 to_date,
                 make_plots=True,
                 plot_folder=se.plot_folder,
                 forcing='grid'):
    """

    :param from_date:
    :param to_date:
    :param make_plots:
    :param plot_folder:
    :return:
    """

    location_name = 'Mosselva'
    y = 6595744
    x = 255853
    altitude = 25

    met_stnr = 17150  # Rygge målestasjon (met.no)

    first_ice = ice.IceColumn(dt.datetime(int(from_date[0:4]), 12, 31), [])
    first_ice.add_metadata('LocationName', location_name)  # used when plotting
    observed_ice = [first_ice]

    year = '{0}-{1}'.format(from_date[0:4], to_date[2:4])

    # Change dates to datetime. Some of the getdata modules require datetime
    from_date = dt.datetime.strptime(from_date, '%Y-%m-%d')
    to_date = dt.datetime.strptime(to_date, '%Y-%m-%d')

    # if to_date forward in time, make sure it doesnt go to far..
    if to_date > dt.datetime.now():
        to_date = dt.datetime.now() + dt.timedelta(days=7)

    if forcing == 'eKlima':

        wsTemp = gws.getMetData(met_stnr, 'TAM', from_date, to_date, 0, 'list')
        gridSno = gts.getgts(x, y, 'sdfsw', from_date, to_date)
        gridSnoTot = gts.getgts(x, y, 'sd', from_date, to_date)

        temp, date = we.strip_metadata(wsTemp, get_date_times=True)
        sno = we.strip_metadata(gridSno)
        sno_tot = we.strip_metadata(gridSnoTot)
        cc = dp.clouds_from_precipitation(sno)

        plot_filename = '{0}_{1}_eklima.png'.format(location_name, year)

    elif forcing == 'grid':

        gridTemp = gts.getgts(x, y, 'tm', from_date, to_date)
        gridSno = gts.getgts(x, y, 'sdfsw', from_date, to_date)
        gridSnoTot = gts.getgts(x, y, 'sd', from_date, to_date)

        gridTempNewElevation = we.adjust_temperature_to_new_altitude(
            gridTemp, altitude)

        temp, date = we.strip_metadata(gridTempNewElevation,
                                       get_date_times=True)
        sno = we.strip_metadata(gridSno)
        sno_tot = we.strip_metadata(gridSnoTot)
        cc = dp.clouds_from_precipitation(sno)

        plot_filename = '{0}_{1}_grid.png'.format(location_name, year)

    else:
        temp, date = None, None
        sno = None
        sno_tot = None
        cc = None

        plot_filename = '{0}_{1}_no_forcing.png'.format(location_name, year)

    calculated_ice = it.calculate_ice_cover_air_temp(copy.deepcopy(first_ice),
                                                     date,
                                                     temp,
                                                     sno,
                                                     cloud_cover=cc)

    if make_plots:
        plot_path_and_filename = '{0}{1}'.format(plot_folder, plot_filename)
        pts.plot_ice_cover(calculated_ice, observed_ice, date, temp, sno,
                           sno_tot, plot_path_and_filename)
Beispiel #12
0
def harvest_for_mylake_hakkloa(from_string, to_string):
    """Method gathers meteorological parameters needed to run myLake on Hakkloa and saves them to a
    formatted file as needed to run myLake. For columns needed se MyLakeInput class.

    :param from_string:     {string}    from date to acquire data
    :param to_string:       {string}    to date to acquire data
    :return:

    HydraII parameters:
        Wind                15
        Temperature         17
        Relative humidity    2
    """

    utm33_x = 259942  # Hakloa (buoy)
    utm33_y = 6671218  # Hakloa (buoy)
    stnr_met_blind = 18700  # Blindern (met)
    stnr_met_bjorn = 18500  # Bjørnholt (met)
    stnr_nve = '6.24.4'  # Hakloa (NVE)

    hydraii_temperature = '{0}6.24.4.17.1 Hakkloa temperatur 20110101-20151009.txt'.format(
        env.data_path)
    hydraii_wind = '{0}6.24.4.15.1 Hakkloa vind 20110101-20151009.txt'.format(
        env.data_path)
    hydraii_relative_humidity = '{0}6.24.4.2.1 Hakkloa relativ fuktighet 20110101-20151009.txt'.format(
        env.data_path)

    from_date = dt.datetime.strptime(from_string, "%Y-%m-%d")
    to_date = dt.datetime.strptime(to_string, "%Y-%m-%d")
    data = MyLakeInput(from_date, to_date)
    data.output_file_path = '{0}HAK_input'.format(env.data_path)
    data.output_header = 'MyLake model resources data for Hakkloa from Hakkloa (NVE), Bjørnholt (met) and Blindern (met) stations'

    data.add_Global_rad(
        we.constant_weather_element('Hakkloa', from_date, to_date,
                                    'Global_rad', None))
    data.add_Cloud_cov(
        gws.getMetData(stnr_met_blind, 'NNM', from_date, to_date, 0))
    data.add_Air_temp(
        gfd.read_hydra_time_value(stnr_nve, '17.1', hydraii_temperature,
                                  from_date, to_date))
    data.add_Relat_hum(
        gfd.read_hydra_time_value(stnr_nve, '2.1', hydraii_relative_humidity,
                                  from_date, to_date))
    data.add_Air_press(
        gws.getMetData(stnr_met_blind, 'POM', from_date, to_date, 0))
    data.add_Wind_speed(
        gfd.read_hydra_time_value(stnr_nve, '15.1', hydraii_wind, from_date,
                                  to_date))
    data.add_Precipitation(
        we.millimeter_from_meter(
            gws.getMetData(stnr_met_bjorn, 'RR', from_date, to_date, 0)))

    # Inflow is water shed area * precipitation
    Inflow = []
    precipitation = data.Precipitation  # precipitation in [mm]
    water_shed_area = 6.49 * 10**6  # [m2]
    for p in precipitation:
        value = p.Value / 1000 * water_shed_area
        Inflow.append(we.WeatherElement('Hakkloa', p.Date, 'Inflow', value))
    data.add_Inflow(Inflow)

    # Inflow temperature is assumed air temp but never below 0C and if snow always 0C
    snow = gcs.getGriddata(utm33_x, utm33_y, 'sd', from_date, to_date)
    temperature = data.Air_temp

    #mfd.write_weather_element_list(temperature)
    #mfd.write_weather_element_list(snow)
    #mfd.write_weather_element_list(data.Relat_hum)
    #mfd.write_weather_element_list(data.Wind_speed)

    Inflow_T = []
    for i in range(0, len(snow), 1):
        date = temperature[i].Date
        value = max(0., temperature[i].Value)  # water never below 0C
        if snow[i].Value > 0. and value > 0.:  # if snow, water never over 0C
            value = 0.
        Inflow_T.append(we.WeatherElement('Hakkloa', date, 'Inflow_T', value))
    data.add_Inflow_T(Inflow_T)

    data.add_Inflow_C(
        we.constant_weather_element('Hakkloa', from_date, to_date, 'Inflow_C',
                                    .5))
    data.add_Inflow_S(
        we.constant_weather_element('Hakkloa', from_date, to_date, 'Inflow_S',
                                    .01))
    data.add_Inflow_TP(
        we.constant_weather_element('Hakkloa', from_date, to_date, 'Inflow_TP',
                                    44.))
    data.add_Inflow_DOP(
        we.constant_weather_element('Hakkloa', from_date, to_date,
                                    'Inflow_DOP', 7.))
    data.add_Inflow_Chla(
        we.constant_weather_element('Hakkloa', from_date, to_date,
                                    'Inflow_Chla', .1))
    data.add_Inflow_DOC(
        we.constant_weather_element('Hakkloa', from_date, to_date,
                                    'Inflow_DOC', 3000.))

    return data
Beispiel #13
0
def run_mosselva(from_date, to_date, make_plots=True, plot_folder=se.plot_folder, forcing='grid'):
    """

    :param from_date:
    :param to_date:
    :param make_plots:
    :param plot_folder:
    :return:
    """

    location_name = 'Mosselva'
    y = 6595744
    x = 255853
    altitude = 25

    met_stnr = 17150    # Rygge målestasjon (met.no)

    first_ice = ice.IceColumn(dt.datetime(int(from_date[0:4]), 12, 31), [])
    first_ice.add_metadata('LocationName', location_name)       # used when plotting
    observed_ice = [first_ice]

    year = '{0}-{1}'.format(from_date[0:4], to_date[2:4])

    # Change dates to datetime. Some of the getdata modules require datetime
    from_date = dt.datetime.strptime(from_date, '%Y-%m-%d')
    to_date = dt.datetime.strptime(to_date, '%Y-%m-%d')

    # if to_date forward in time, make sure it doesnt go to far..
    if to_date > dt.datetime.now():
        to_date = dt.datetime.now() + dt.timedelta(days=7)

    if forcing == 'eKlima':

        wsTemp = gws.getMetData(met_stnr, 'TAM', from_date, to_date, 0, 'list')
        gridSno = gts.getgts(x, y, 'sdfsw', from_date, to_date)
        gridSnoTot = gts.getgts(x, y, 'sd', from_date, to_date)

        temp, date = we.strip_metadata(wsTemp, get_date_times=True)
        sno = we.strip_metadata(gridSno)
        sno_tot = we.strip_metadata(gridSnoTot)
        cc = dp.clouds_from_precipitation(sno)

        plot_filename = '{0}_{1}_eklima.png'.format(location_name, year)

    elif forcing == 'grid':

        gridTemp = gts.getgts(x, y, 'tm', from_date, to_date)
        gridSno = gts.getgts(x, y, 'sdfsw', from_date, to_date)
        gridSnoTot = gts.getgts(x, y, 'sd', from_date, to_date)

        gridTempNewElevation = we.adjust_temperature_to_new_altitude(gridTemp, altitude)

        temp, date = we.strip_metadata(gridTempNewElevation, get_date_times=True)
        sno = we.strip_metadata(gridSno)
        sno_tot = we.strip_metadata(gridSnoTot)
        cc = dp.clouds_from_precipitation(sno)

        plot_filename = '{0}_{1}_grid.png'.format(location_name, year)

    else:
        temp, date = None, None
        sno = None
        sno_tot = None
        cc = None

        plot_filename = '{0}_{1}_no_forcing.png'.format(location_name, year)

    calculated_ice = it.calculate_ice_cover_air_temp(copy.deepcopy(first_ice), date, temp, sno, cloud_cover=cc)

    if make_plots:
        plot_path_and_filename = '{0}{1}'.format(plot_folder, plot_filename)
        pts.plot_ice_cover(calculated_ice, observed_ice, date, temp, sno, sno_tot, plot_path_and_filename)
def calculate_and_plot_location(location_name,
                                from_date,
                                to_date,
                                sub_plot_folder='',
                                make_plots=True,
                                return_values=False):
    """ due to get_all_season_ice returns data grouped be location_id
    For a given LocationName in regObs calculate the ice cover between two dates. Optional, make plots
    and/or return the calculations and observations for this location. Different sources for weather data
    may be given, chartserver grid is default.

    :param location_name:
    :param from_date:               [String] 'yyyy-mm-dd'
    :param to_date:                 [String] 'yyyy-mm-dd'
    :param sub_plot_folder:
    :param make_plots:
    :param return_values:           [bool]  If true the calculated and observed data is returned
    """

    loc = slp.get_for_location(location_name)
    year = '{0}-{1}'.format(from_date[0:4], to_date[2:4])
    lake_file_name = '{0} {1}'.format(
        fe.make_standard_file_name(loc.file_name), year)
    observed_ice = gro.get_observations_on_location_id(loc.regobs_location_id,
                                                       year)

    # Change dates to datetime. Some of the getdata modules require datetime
    from_date = dt.datetime.strptime(from_date, '%Y-%m-%d')
    to_date = dt.datetime.strptime(to_date, '%Y-%m-%d')

    # special rule for this season.
    if year == '2018-19':
        from_date = dt.datetime(2017, 10, 15)

    # if to_date forward in time, make sure it doesnt go to far..
    if to_date > dt.datetime.now():
        to_date = dt.datetime.now() + dt.timedelta(days=7)

    if loc.weather_data_source == 'eKlima':
        wsTemp = gws.getMetData(loc.eklima_TAM, 'TAM', from_date, to_date, 0,
                                'list')
        temp, date = we.strip_metadata(wsTemp, True)

        wsSno = gws.getMetData(loc.eklima_SA, 'SA', from_date, to_date, 0,
                               'list')
        snotot = we.strip_metadata(wsSno)
        sno = dp.delta_snow_from_total_snow(snotot)

        # Clouds. If not from met.no it is parametrised from precipitation.
        if loc.eklima_NNM:
            wsCC = gws.getMetData(loc.eklima_NNM, 'NNM', from_date, to_date, 0,
                                  'list')
            cc = we.strip_metadata(wsCC)
        else:
            cc = dp.clouds_from_precipitation(sno)

        plot_filename = '{0}{1} eklima.png'.format(
            se.plot_folder + sub_plot_folder, lake_file_name)

    elif loc.weather_data_source == 'grid':
        x, y = loc.utm_east, loc.utm_north

        gridTemp = gts.getgts(x, y, 'tm', from_date, to_date)
        gridSno = gts.getgts(x, y, 'sdfsw', from_date, to_date)
        gridSnoTot = gts.getgts(x, y, 'sd', from_date, to_date)

        temp, date = we.strip_metadata(gridTemp, get_date_times=True)
        sno = we.strip_metadata(gridSno, False)
        snotot = we.strip_metadata(gridSnoTot, False)

        if loc.eklima_NNM:
            wsCC = gws.getMetData(loc.eklima_NNM, 'NNM', from_date, to_date, 0,
                                  'list')
            cc = we.strip_metadata(wsCC)
        else:
            cc = dp.clouds_from_precipitation(sno)

        plot_filename = '{0}{1} grid.png'.format(
            se.plot_folder + sub_plot_folder, lake_file_name)

    elif loc.weather_data_source == 'nve':
        x, y = loc.utm_east, loc.utm_north

        # Temp from NVE station or grid if not.
        if loc.nve_temp:
            temp_obj = gcsd.getStationdata(loc.nve_temp,
                                           '17.1',
                                           from_date,
                                           to_date,
                                           timeseries_type=0)
        else:
            temp_obj = gcsd.getGriddata(x, y, 'tm', from_date, to_date)
        temp, date = we.strip_metadata(temp_obj, get_date_times=True)

        # Snow from NVE station or grid if not.
        if loc.nve_snow:
            snotot_obj = gcsd.getStationdata(loc.nve_snow,
                                             '2002.1',
                                             from_date,
                                             to_date,
                                             timeseries_type=0)
            snotot = we.strip_metadata(snotot_obj)
            sno = dp.delta_snow_from_total_snow(snotot_obj)
        else:
            snotot_obj = gcsd.getGriddata(x,
                                          y,
                                          'sd',
                                          from_date,
                                          to_date,
                                          timeseries_type=0)
            sno_obj = gcsd.getGriddata(x,
                                       y,
                                       'fsw',
                                       from_date,
                                       to_date,
                                       timeseries_type=0)
            snotot = we.strip_metadata(snotot_obj)
            sno = we.strip_metadata(sno_obj)

        # Clouds. If not from met.no it is parametrised from precipitation.
        if loc.eklima_NNM:
            cc_obj = gws.getMetData(18700, 'NNM', from_date, to_date, 0,
                                    'list')
        else:
            cc_obj = dp.clouds_from_precipitation(sno)
        cc = we.strip_metadata(cc_obj)

        plot_filename = '{0}{1} nve.png'.format(
            se.plot_folder + sub_plot_folder, lake_file_name)

    elif loc.weather_data_source == 'file':
        date, temp, sno, snotot = gfd.read_weather(from_date, to_date,
                                                   loc.input_file)
        cc = dp.clouds_from_precipitation(sno)

        plot_filename = '{0}{1} file.png'.format(
            se.plot_folder + sub_plot_folder, lake_file_name)

    else:
        ml.log_and_print(
            "[Error] runicethickness -> calculate_and_plot_location: Invalid scource for weather data."
        )
        return

    try:
        if len(observed_ice) == 0:
            calculated_ice = it.calculate_ice_cover_air_temp(
                ice.IceColumn(date[0], []), date, temp, sno, cc)
        else:
            calculated_ice = it.calculate_ice_cover_air_temp(
                copy.deepcopy(observed_ice[0]), date, temp, sno, cc)

        if make_plots:
            pts.plot_ice_cover(calculated_ice, observed_ice, date, temp, sno,
                               snotot, plot_filename)

    except:
        error_msg = sys.exc_info()[0]
        ml.log_and_print(
            "[Error] calculateandplot.py -> calculate_and_plot_location: {}. Could not plot {}."
            .format(error_msg, location_name))
        calculated_ice = None

    if return_values:
        return calculated_ice, observed_ice
def calculate_and_plot_location(location_name, from_date, to_date, sub_plot_folder='', make_plots=True, return_values=False):
    """ due to get_all_season_ice returns data grouped be location_id
    For a given LocationName in regObs calculate the ice cover between two dates. Optional, make plots
    and/or return the calculations and observations for this location. Different sources for weather data
    may be given, chartserver grid is default.

    :param location_name:
    :param from_date:               [String] 'yyyy-mm-dd'
    :param to_date:                 [String] 'yyyy-mm-dd'
    :param sub_plot_folder:
    :param make_plots:
    :param return_values:           [bool]  If true the calculated and observed data is returned
    """

    loc = slp.get_for_location(location_name)
    year = '{0}-{1}'.format(from_date[0:4], to_date[2:4])
    lake_file_name = '{0} {1}'.format(fe.make_standard_file_name(loc.file_name), year)
    observed_ice = gro.get_observations_on_location_id(loc.regobs_location_id, year)

    # Change dates to datetime. Some of the getdata modules require datetime
    from_date = dt.datetime.strptime(from_date, '%Y-%m-%d')
    to_date = dt.datetime.strptime(to_date, '%Y-%m-%d')

    # special rule for this season.
    if year == '2018-19':
        from_date = dt.datetime(2017, 10, 15)

    # if to_date forward in time, make sure it doesnt go to far..
    if to_date > dt.datetime.now():
        to_date = dt.datetime.now() + dt.timedelta(days=7)

    if loc.weather_data_source == 'eKlima':
        wsTemp = gws.getMetData(loc.eklima_TAM, 'TAM', from_date, to_date, 0, 'list')
        temp, date = we.strip_metadata(wsTemp, True)

        wsSno = gws.getMetData(loc.eklima_SA, 'SA', from_date, to_date, 0, 'list')
        snotot = we.strip_metadata(wsSno)
        sno = dp.delta_snow_from_total_snow(snotot)

        # Clouds. If not from met.no it is parametrised from precipitation.
        if loc.eklima_NNM:
            wsCC = gws.getMetData(loc.eklima_NNM, 'NNM', from_date, to_date, 0, 'list')
            cc = we.strip_metadata(wsCC)
        else:
            cc = dp.clouds_from_precipitation(sno)

        plot_filename = '{0}{1} eklima.png'.format(se.plot_folder + sub_plot_folder, lake_file_name)

    elif loc.weather_data_source == 'grid':
        x, y = loc.utm_east, loc.utm_north

        gridTemp = gts.getgts(x, y, 'tm', from_date, to_date)
        gridSno = gts.getgts(x, y, 'sdfsw', from_date, to_date)
        gridSnoTot = gts.getgts(x, y, 'sd', from_date, to_date)

        temp, date = we.strip_metadata(gridTemp, get_date_times=True)
        sno = we.strip_metadata(gridSno, False)
        snotot = we.strip_metadata(gridSnoTot, False)

        if loc.eklima_NNM:
            wsCC = gws.getMetData(loc.eklima_NNM, 'NNM', from_date, to_date, 0, 'list')
            cc = we.strip_metadata(wsCC)
        else:
            cc = dp.clouds_from_precipitation(sno)

        plot_filename = '{0}{1} grid.png'.format(se.plot_folder + sub_plot_folder, lake_file_name)

    elif loc.weather_data_source == 'nve':
        x, y = loc.utm_east, loc.utm_north

        # Temp from NVE station or grid if not.
        if loc.nve_temp:
            temp_obj = gcsd.getStationdata(loc.nve_temp, '17.1', from_date, to_date, timeseries_type=0)
        else:
            temp_obj = gcsd.getGriddata(x, y, 'tm', from_date, to_date)
        temp, date = we.strip_metadata(temp_obj, get_date_times=True)

        # Snow from NVE station or grid if not.
        if loc.nve_snow:
            snotot_obj = gcsd.getStationdata(loc.nve_snow, '2002.1', from_date, to_date, timeseries_type=0)
            snotot = we.strip_metadata(snotot_obj)
            sno = dp.delta_snow_from_total_snow(snotot_obj)
        else:
            snotot_obj = gcsd.getGriddata(x, y, 'sd', from_date, to_date, timeseries_type=0)
            sno_obj = gcsd.getGriddata(x, y, 'fsw', from_date, to_date, timeseries_type=0)
            snotot = we.strip_metadata(snotot_obj)
            sno = we.strip_metadata(sno_obj)

        # Clouds. If not from met.no it is parametrised from precipitation.
        if loc.eklima_NNM:
            cc_obj = gws.getMetData(18700, 'NNM', from_date, to_date, 0, 'list')
        else:
            cc_obj = dp.clouds_from_precipitation(sno)
        cc = we.strip_metadata(cc_obj)

        plot_filename = '{0}{1} nve.png'.format(se.plot_folder + sub_plot_folder, lake_file_name)

    elif loc.weather_data_source == 'file':
        date, temp, sno, snotot = gfd.read_weather(from_date, to_date, loc.input_file)
        cc = dp.clouds_from_precipitation(sno)

        plot_filename = '{0}{1} file.png'.format(se.plot_folder + sub_plot_folder, lake_file_name)

    else:
        ml.log_and_print("[Error] runicethickness -> calculate_and_plot_location: Invalid scource for weather data.")
        return

    try:
        if len(observed_ice) == 0:
            calculated_ice = it.calculate_ice_cover_air_temp(ice.IceColumn(date[0], []), date, temp, sno, cc)
        else:
            calculated_ice = it.calculate_ice_cover_air_temp(copy.deepcopy(observed_ice[0]), date, temp, sno, cc)

        if make_plots:
            pts.plot_ice_cover(calculated_ice, observed_ice, date, temp, sno, snotot, plot_filename)

    except:
        error_msg = sys.exc_info()[0]
        ml.log_and_print("[Error] calculateandplot.py -> calculate_and_plot_location: {}. Could not plot {}.".format(error_msg, location_name))
        calculated_ice = None

    if return_values:
        return calculated_ice, observed_ice
def harvest_for_mylake_hakkloa(from_string, to_string):
    """Method gathers meteorological parameters needed to run myLake on Hakkloa and saves them to a
    formatted file as needed to run myLake. For columns needed se MyLakeInput class.

    :param from_string:     {string}    from date to acquire data
    :param to_string:       {string}    to date to acquire data
    :return:

    HydraII parameters:
        Wind                15
        Temperature         17
        Relative humidity    2
    """

    utm33_x = 259942                # Hakloa (buoy)
    utm33_y = 6671218               # Hakloa (buoy)
    stnr_met_blind = 18700          # Blindern (met)
    stnr_met_bjorn = 18500          # Bjørnholt (met)
    stnr_nve = '6.24.4'             # Hakloa (NVE)

    hydraii_temperature = '{0}6.24.4.17.1 Hakkloa temperatur 20110101-20151009.txt'.format(env.data_path)
    hydraii_wind = '{0}6.24.4.15.1 Hakkloa vind 20110101-20151009.txt'.format(env.data_path)
    hydraii_relative_humidity = '{0}6.24.4.2.1 Hakkloa relativ fuktighet 20110101-20151009.txt'.format(env.data_path)

    from_date = dt.datetime.strptime(from_string, "%Y-%m-%d")
    to_date = dt.datetime.strptime(to_string, "%Y-%m-%d")
    data = MyLakeInput(from_date, to_date)
    data.output_file_path = '{0}HAK_input'.format(env.data_path)
    data.output_header = 'MyLake model resources data for Hakkloa from Hakkloa (NVE), Bjørnholt (met) and Blindern (met) stations'

    data.add_Global_rad(we.constant_weather_element('Hakkloa', from_date, to_date, 'Global_rad', None))
    data.add_Cloud_cov(gws.getMetData(stnr_met_blind, 'NNM', from_date, to_date, 0))
    data.add_Air_temp(gfd.read_hydra_time_value(stnr_nve, '17.1', hydraii_temperature, from_date, to_date))
    data.add_Relat_hum(gfd.read_hydra_time_value(stnr_nve, '2.1', hydraii_relative_humidity, from_date, to_date))
    data.add_Air_press(gws.getMetData(stnr_met_blind, 'POM', from_date, to_date, 0))
    data.add_Wind_speed(gfd.read_hydra_time_value(stnr_nve, '15.1', hydraii_wind, from_date, to_date))
    data.add_Precipitation(we.millimeter_from_meter(gws.getMetData(stnr_met_bjorn, 'RR', from_date, to_date, 0)))

    # Inflow is water shed area * precipitation
    Inflow = []
    precipitation = data.Precipitation # precipitation in [mm]
    water_shed_area = 6.49 * 10**6 # [m2]
    for p in precipitation:
        value =  p.Value/1000*water_shed_area
        Inflow.append(we.WeatherElement('Hakkloa', p.Date, 'Inflow', value))
    data.add_Inflow(Inflow)

    # Inflow temperature is assumed air temp but never below 0C and if snow always 0C
    snow = gcs.getGriddata(utm33_x, utm33_y, 'sd', from_date, to_date)
    temperature = data.Air_temp

    #mfd.write_weather_element_list(temperature)
    #mfd.write_weather_element_list(snow)
    #mfd.write_weather_element_list(data.Relat_hum)
    #mfd.write_weather_element_list(data.Wind_speed)

    Inflow_T = []
    for i in range(0, len(snow), 1):
        date = temperature[i].Date
        value = max(0., temperature[i].Value)       # water never below 0C
        if snow[i].Value > 0. and value > 0.:       # if snow, water never over 0C
            value = 0.
        Inflow_T.append(we.WeatherElement('Hakkloa', date, 'Inflow_T', value))
    data.add_Inflow_T(Inflow_T)

    data.add_Inflow_C(we.constant_weather_element('Hakkloa', from_date, to_date, 'Inflow_C', .5))
    data.add_Inflow_S(we.constant_weather_element('Hakkloa', from_date, to_date, 'Inflow_S', .01))
    data.add_Inflow_TP(we.constant_weather_element('Hakkloa', from_date, to_date, 'Inflow_TP', 44.))
    data.add_Inflow_DOP(we.constant_weather_element('Hakkloa', from_date, to_date, 'Inflow_DOP', 7.))
    data.add_Inflow_Chla(we.constant_weather_element('Hakkloa', from_date, to_date, 'Inflow_Chla', .1))
    data.add_Inflow_DOC(we.constant_weather_element('Hakkloa', from_date, to_date, 'Inflow_DOC', 3000.))

    return data
Beispiel #17
0
def run_semsvann(from_date, to_date, make_plots=True, plot_folder=se.plot_folder, forcing='grid'):
    """

    :param from_date:
    :param to_date:
    :param make_plots:
    :param plot_folder:
    :return:
    """

    location_name = 'Semsvann'
    regobs_location_id = 2227

    x = 243655
    y = 6644286
    altitude = 145

    met_stnr = 19710        # Asker (Sem)
    met_stnr_NNM = 18700    # Blindern

    year = '{0}-{1}'.format(from_date[0:4], to_date[2:4])

    observed_ice = gro.get_observations_on_location_id(regobs_location_id, year)
    first_ice = observed_ice[0]

    # Change dates to datetime. Some of the getdata modules require datetime
    from_date = dt.datetime.strptime(from_date, '%Y-%m-%d')
    to_date = dt.datetime.strptime(to_date, '%Y-%m-%d')

    # if to_date forward in time, make sure it doesnt go to far..
    if to_date > dt.datetime.now():
        to_date = dt.datetime.now() + dt.timedelta(days=7)

    if forcing == 'eKlima':

        wsTemp = gws.getMetData(met_stnr, 'TAM', from_date, to_date, 0, 'list')
        wsSnoTot = gws.getMetData(met_stnr, 'SA', from_date, to_date, 0, 'list')
        wsCC = gws.getMetData(met_stnr_NNM, 'NNM', from_date, to_date, 0, 'list')

        temp, date = we.strip_metadata(wsTemp, get_date_times=True)
        sno_tot = we.strip_metadata(wsSnoTot)
        sno = dp.delta_snow_from_total_snow(sno_tot)
        cc = we.strip_metadata(wsCC)

        plot_filename = '{0}_{1}_eklima.png'.format(location_name, year)

    elif forcing == 'grid':

        gridTemp = gts.getgts(x, y, 'tm', from_date, to_date)
        gridSno = gts.getgts(x, y, 'sdfsw', from_date, to_date)
        gridSnoTot = gts.getgts(x, y, 'sd', from_date, to_date)

        # Grid altitude and lake at same elevations.
        gridTempNewElevation = we.adjust_temperature_to_new_altitude(gridTemp, altitude)

        temp, date = we.strip_metadata(gridTempNewElevation, get_date_times=True)
        sno = we.strip_metadata(gridSno)
        sno_tot = we.strip_metadata(gridSnoTot)
        cc = dp.clouds_from_precipitation(sno)

        plot_filename = '{0}_{1}_grid.png'.format(location_name, year)

    else:
        temp, date = None, None
        sno = None
        sno_tot = None
        cc = None

        plot_filename = '{0}_{1}_no_forcing.png'.format(location_name, year)

    calculated_ice = it.calculate_ice_cover_air_temp(copy.deepcopy(first_ice), date, temp, sno, cloud_cover=cc)

    if make_plots:
        plot_path_and_filename = '{0}{1}'.format(plot_folder, plot_filename)
        pts.plot_ice_cover(calculated_ice, observed_ice, date, temp, sno, sno_tot, plot_path_and_filename)
Beispiel #18
0
def run_semsvann(from_date,
                 to_date,
                 make_plots=True,
                 plot_folder=se.plot_folder,
                 forcing='grid'):
    """

    :param from_date:
    :param to_date:
    :param make_plots:
    :param plot_folder:
    :return:
    """

    location_name = 'Semsvann'
    regobs_location_id = 2227

    x = 243655
    y = 6644286
    altitude = 145

    met_stnr = 19710  # Asker (Sem)
    met_stnr_NNM = 18700  # Blindern

    year = '{0}-{1}'.format(from_date[0:4], to_date[2:4])

    observed_ice = gro.get_observations_on_location_id(regobs_location_id,
                                                       year)
    first_ice = observed_ice[0]

    # Change dates to datetime. Some of the getdata modules require datetime
    from_date = dt.datetime.strptime(from_date, '%Y-%m-%d')
    to_date = dt.datetime.strptime(to_date, '%Y-%m-%d')

    # if to_date forward in time, make sure it doesnt go to far..
    if to_date > dt.datetime.now():
        to_date = dt.datetime.now() + dt.timedelta(days=7)

    if forcing == 'eKlima':

        wsTemp = gws.getMetData(met_stnr, 'TAM', from_date, to_date, 0, 'list')
        wsSnoTot = gws.getMetData(met_stnr, 'SA', from_date, to_date, 0,
                                  'list')
        wsCC = gws.getMetData(met_stnr_NNM, 'NNM', from_date, to_date, 0,
                              'list')

        temp, date = we.strip_metadata(wsTemp, get_date_times=True)
        sno_tot = we.strip_metadata(wsSnoTot)
        sno = dp.delta_snow_from_total_snow(sno_tot)
        cc = we.strip_metadata(wsCC)

        plot_filename = '{0}_{1}_eklima.png'.format(location_name, year)

    elif forcing == 'grid':

        gridTemp = gts.getgts(x, y, 'tm', from_date, to_date)
        gridSno = gts.getgts(x, y, 'sdfsw', from_date, to_date)
        gridSnoTot = gts.getgts(x, y, 'sd', from_date, to_date)

        # Grid altitude and lake at same elevations.
        gridTempNewElevation = we.adjust_temperature_to_new_altitude(
            gridTemp, altitude)

        temp, date = we.strip_metadata(gridTempNewElevation,
                                       get_date_times=True)
        sno = we.strip_metadata(gridSno)
        sno_tot = we.strip_metadata(gridSnoTot)
        cc = dp.clouds_from_precipitation(sno)

        plot_filename = '{0}_{1}_grid.png'.format(location_name, year)

    else:
        temp, date = None, None
        sno = None
        sno_tot = None
        cc = None

        plot_filename = '{0}_{1}_no_forcing.png'.format(location_name, year)

    calculated_ice = it.calculate_ice_cover_air_temp(copy.deepcopy(first_ice),
                                                     date,
                                                     temp,
                                                     sno,
                                                     cloud_cover=cc)

    if make_plots:
        plot_path_and_filename = '{0}{1}'.format(plot_folder, plot_filename)
        pts.plot_ice_cover(calculated_ice, observed_ice, date, temp, sno,
                           sno_tot, plot_path_and_filename)