コード例 #1
0
def calibrate_model(run_name,
                    simulation_folder,
                    outlet_ID,
                    runoff_file,
                    calibration_parameters,
                    initial_numerical_values=""):
    """
    Parameters
    ----------
    calibration_parameters: a list, of calibration parameters. [fac_L, fac_Ks, fac_n_o, fac_n_c, fac_th_s]
    initial_numerical_values: a list, of initial numeric values [pvs_t0,vo_t0,qc_t0, kc  ]
    simulation_folder: folder where results and everything are there

    Returns: a list. [Runname, date_time, nash value,\t, [Q_sim]]
    -------
    """
    fac_L = calibration_parameters[0]
    fac_Ks = calibration_parameters[1]
    fac_n_o = calibration_parameters[2]
    fac_n_c = calibration_parameters[3]
    fac_th_s = calibration_parameters[4]

    create_config_files_TOPKAPI_ini(simulation_folder, 'False', 'False', fac_L,
                                    fac_Ks, fac_n_o, fac_n_c, fac_th_s)

    # make changes to numerical value section in cell_param.dat
    if initial_numerical_values != "":
        cell_param_array = np.genfromtxt(simulation_folder + '/cell_param.dat',
                                         delimiter=' ')

        pvs_t0 = initial_numerical_values[0]  # located at col-16 (15 in index)
        vo_t0 = initial_numerical_values[1]  # located at col-17 (16 in index)
        qc_t0 = initial_numerical_values[2]  # located at col-18 (17 in index)
        kc = initial_numerical_values[3]  # located at col-19 (18 in index)

        # change the values that exist
        cell_param_array[:, 15] = np.zeros(
            (int(cell_param_array[:, 15].shape[0]), )) + pvs_t0
        cell_param_array[:, 16] = np.zeros(
            (int(cell_param_array[:, 16].shape[0]), )) + vo_t0
        cell_param_array[:, 17] = np.zeros(
            (int(cell_param_array[:, 17].shape[0]), )) + qc_t0
        cell_param_array[:, 18] = np.zeros(
            (int(cell_param_array[:, 18].shape[0]), )) + kc

        np.savetxt(simulation_folder + '/cell_param.dat',
                   cell_param_array,
                   delimiter=' ')

    # run the program now
    pytopkapi.run(simulation_folder + '/TOPKAPI.ini')

    error_checking_param, ar_Q_sim = plot_sim_observed(run_name,
                                                       simulation_folder,
                                                       runoff_file, outlet_ID)

    return error_checking_param, ar_Q_sim
コード例 #2
0
def calibrate_model(run_name, simulation_folder,  outlet_ID, runoff_file, calibration_parameters,initial_numerical_values= ""):
    """
    Parameters
    ----------
    calibration_parameters: a list, of calibration parameters. [fac_L, fac_Ks, fac_n_o, fac_n_c, fac_th_s]
    initial_numerical_values: a list, of initial numeric values [pvs_t0,vo_t0,qc_t0, kc  ]
    simulation_folder: folder where results and everything are there

    Returns: a list. [Runname, date_time, nash value,\t, [Q_sim]]
    -------
    """
    fac_L = calibration_parameters[0]
    fac_Ks = calibration_parameters[1]
    fac_n_o = calibration_parameters[2]
    fac_n_c = calibration_parameters[3]
    fac_th_s = calibration_parameters[4]

    create_config_files_TOPKAPI_ini(simulation_folder, 'False', 'False', fac_L, fac_Ks, fac_n_o, fac_n_c, fac_th_s)

    # make changes to numerical value section in cell_param.dat
    if initial_numerical_values != "":
        cell_param_array = np.genfromtxt(simulation_folder + '/cell_param.dat', delimiter=' ')

        pvs_t0 = initial_numerical_values[0] # located at col-16 (15 in index)
        vo_t0 = initial_numerical_values[1]  # located at col-17 (16 in index)
        qc_t0 = initial_numerical_values[2]  # located at col-18 (17 in index)
        kc = initial_numerical_values[3]     # located at col-19 (18 in index)

        # change the values that exist
        cell_param_array[:, 15] = np.zeros((int(cell_param_array[:, 15].shape[0]),)) + pvs_t0
        cell_param_array[:, 16] = np.zeros((int(cell_param_array[:, 16].shape[0]),)) + vo_t0
        cell_param_array[:, 17] = np.zeros((int(cell_param_array[:, 17].shape[0]),)) + qc_t0
        cell_param_array[:, 18] = np.zeros((int(cell_param_array[:, 18].shape[0]),)) + kc

        np.savetxt(simulation_folder + '/cell_param.dat',cell_param_array , delimiter=' ')


    # run the program now
    pytopkapi.run(simulation_folder+'/TOPKAPI.ini')

    error_checking_param ,ar_Q_sim = plot_sim_observed(run_name, simulation_folder, runoff_file, outlet_ID)

    return error_checking_param, ar_Q_sim
コード例 #3
0
ファイル: run.py プロジェクト: joycezw/topkapi-modeling
import sys
sys.path.append('../../PyTOPKAPI')

import pytopkapi
from pytopkapi.results_analysis import plot_Qsim_Qobs_Rain, plot_soil_moisture_maps
import os
import h5py
# from PIL import Image

os.chdir("./run_the_model")

pytopkapi.run('TOPKAPI.ini')

plot_Qsim_Qobs_Rain.run('plot-flow-precip.ini')

# plot_soil_moisture_maps.run('plot-soil-moisture-maps.ini')
#
# # results
# result_sim5 = h5py.File("../../simulations/TEST SIMULAITON5/run_the_model/results/results.h5")
# channel_flows = result_sim5['Channel/Qc_out'][...]
# flow = channel_flows[:,0]
#
# soil_stores = result_sim5['Soil/V_s'][...]
# soil = soil_stores[:, :10]
#
# # channel_flow = result_sim5['Channel']['Qc_out'][:]
# # w, h = channel_flow.shape
# # img = Image.fromarray(channel_flow, 'RGB')
コード例 #4
0
def run_pyTOPKAPI(ini_fname):
    import ConfigParser
    from ConfigParser import SafeConfigParser

    # initializing
    config = SafeConfigParser()
    config.read(ini_fname)
    print 'Reading initializing file: ', ini_fname
    # # Pre-processing # #
    preprocessing_input = config.getboolean('preprocessing',
                                            'preprocessing_input')

    # # Create Parameter file (cell_param.dat) # #
    create_param_files = config.getboolean('create_param_files',
                                           'create_param_files')
    if create_param_files:
        simulation_folder = config.get('create_param_files',
                                       'simulation_folder')
        in_tiff_folder = config.get('create_param_files', 'in_tiff_folder')

        areaThreshold = config.getfloat('create_param_files', 'areaThreshold')
        cell_size = config.getfloat('create_param_files', 'cell_size')

        pVs_t0 = config.getfloat('create_param_files_parameters', 'pVs_t0')
        Vo_t0 = config.getfloat('create_param_files_parameters', 'Vo_t0')

    # # Simulation # #
    run_simulation = config.getboolean('simulation', 'run_simulation')

    if run_simulation:
        simulation_folder = config.get('simulation_forcing_files',
                                       'simulation_folder')

        create_forcing_files = config.get('simulation_forcing_files',
                                          'create_forcing_files')
        if create_forcing_files:
            # path to the forcing files
            precipitation_file = config.get('simulation_forcing_files',
                                            'precipitation_file')
            ET_file = config.get('simulation_forcing_files', 'ET_file')

        # Simulations Results
        draw_hydrograph = config.getboolean('simulation_results',
                                            'draw_hydrograph')
        draw_maps = config.getboolean('simulation_results', 'draw_maps')
        Q_observed_file = config.get('simulation_results', 'Q_observed_file')
        variable_id_for_maps = config.getfloat('simulation_results',
                                               'variable_id_for_maps')

    # Calibration #
    # Do Calibration or not
    calibrate_the_model = config.getboolean('calibration',
                                            'calibrate_the_model')

    if calibrate_the_model:
        # only executes if run_simulation is to be done
        pass

    ## MAIN PROGRAM ##
    if preprocessing_input:
        preprocess_input_tiffs(ini_fname)

    if create_param_files:
        if in_tiff_folder == '':
            in_tiff_folder = simulation_folder + '/TIFFS'

        # get cell size, input a tiff, if not given as input
        if cell_size == '':
            cell_size = get_cellSize(in_tiff_folder + '/mask_r.tif')

        # create ini : create_file.ini
        create_config_files_create_file(simulation_folder,
                                        in_tiff_folder,
                                        pVs_t0=pVs_t0,
                                        Vo_t0=Vo_t0)

        # create ini : zero_slope_management.ini
        create_config_files_zero_slope_mngmt(simulation_folder, cell_size)

        # create global parameter files
        # todo: automate Dt, and try W_min and W_max
        create_global_param(simulation_folder,
                            A_thres=areaThreshold,
                            X=cell_size,
                            Dt=86400,
                            W_min=5.,
                            W_Max=30.)

        # create the parameter file
        # using the built in create_file script
        # Also executes the zero slope corrections
        create_cell_param(simulation_folder + '/create_file.ini',
                          simulation_folder + '/zero_slope_management.ini')

    if run_simulation:
        # create forcing files

        outlet_ID, no_of_cell = get_outletID_noOfCell(simulation_folder +
                                                      '/cell_param.dat')
        if create_forcing_files:

            # create hdf5 rainfall and ET files
            # get total number of cells, and the
            # todo: ET is right now all zero. Change this.
            create_rain_ET_file(simulation_folder,
                                no_of_cell,
                                ppt_file_txt=precipitation_file)

            create_config_files_TOPKAPI_ini(simulation_folder,
                                            append_output_binary='False',
                                            fac_L=1.,
                                            fac_Ks=1.,
                                            fac_n_o=1.,
                                            fac_n_c=1.,
                                            fac_th_s=1)

            # create ini: plot-flow-precip.ini
            create_config_files_plot_flow_precip(simulation_folder,
                                                 Q_observed_file, outlet_ID)

            # create ini: plot-soil-moisture-map.ini
            create_config_files_plot_soil_moisture_map(simulation_folder)

        # RUN THE MODEL
        pytopkapi.run(simulation_folder + '/TOPKAPI.ini')

        if draw_hydrograph:
            plot_sim_observed(simulation_folder, Q_observed_file, outlet_ID)
        if draw_maps:
            from pytopkapi.results_analysis import plot_soil_moisture_maps
            plot_soil_moisture_maps.run(simulation_folder +
                                        '/plot-soil-moisture-maps.ini')

    if calibrate_the_model:
        simulation_folder = config.get('simulation_forcing_files',
                                       'simulation_folder')
        Q_observed_file = config.get('simulation_results', 'Q_observed_file')

        if not os.path.exists(simulation_folder + '/results'):
            os.mkdir(simulation_folder + '/results')

        if not os.path.exists(simulation_folder + '/results/calibration'):
            os.mkdir(simulation_folder + '/results/calibration')

        # # create a blank file
        # open(simulation_folder + "/results/calibration/run_log.txt", 'a').close()

        # add headers to it, sort of metadata
        with open(simulation_folder + "/results/calibration/run_log.txt",
                  'a') as f:
            f.write(
                'Calib param: fac_L|fac_Ks|fac_n_o|fac_n_c|fac_th_s '
                '\t Numeric Param:  pvs_t0|vo_t0|qc_t0|kc '
                '\t Errors: nash_value|RMSE|RMSE_norm|Bias_cumul|Diff_cumul|Abs_cumul|Err_cumul\n'
            )

        # get the outlet_ID
        config = SafeConfigParser()
        config.read(simulation_folder + '/plot-flow-precip.ini')

        # outlet_ID
        outlet_id = config.getint('parameters', 'outlet_id')

        calib_factor_range = [x / 100. for x in range(10, 300, 50)]

        i = 1

        # following 4 lines are for NUMERICAL PARAMETER
        for pvs_t0 in [30., 95.]:
            for vo_t0 in [100., 2000.]:
                for qc_t0 in [0.]:
                    for kc in [1]:

                        # following 5 lines are for CALIBRATION PARAMETER
                        for fac_L in [0.1, 1., 4.]:
                            for fac_Ks in [1., 4.]:
                                for fac_n_o in [1.]:
                                    for fac_n_c in [1.]:
                                        for fac_th_s in [1]:

                                            calib_param = [
                                                fac_L, fac_Ks, fac_n_o,
                                                fac_n_c, fac_th_s
                                            ]
                                            numeric_param = [
                                                pvs_t0, vo_t0, qc_t0, kc
                                            ]

                                            run_name = str(i) + "_" + "-".join(
                                                str(item) for item in
                                                calib_param) + "-".join(
                                                    str(item)
                                                    for item in numeric_param)

                                            # get the error parameters (nash_value, RMSE, RMSE_norm, Bias_cumul, Diff_cumul, Abs_cumul, Err_cumul)
                                            # and the simulated discharge for each timestep
                                            # the model run using this function takes calibration parameter and numeric parameter as input

                                            error_checking_param, Q_sim = calibrate_model(
                                                run_name, simulation_folder,
                                                outlet_id, Q_observed_file,
                                                calib_param, numeric_param)

                                            with open(
                                                    simulation_folder +
                                                    '/results/calibration/run_log.txt',
                                                    "a+") as run_log:
                                                run_log.write(
                                                    '\n' + run_name + '\t' +
                                                    "|".join(
                                                        str(item) for item in
                                                        calib_param) + '\t' +
                                                    "|".join(
                                                        str(item) for item in
                                                        numeric_param) + '\t' +
                                                    "|".join(
                                                        str(item) for item in
                                                        error_checking_param) +
                                                    '\tQ_sim: ' + " ".join(
                                                        str(item)
                                                        for item in Q_sim))

                                            i = i + 1
コード例 #5
0
ファイル: run_example.py プロジェクト: scottza/PyTOPKAPI
import pytopkapi
from pytopkapi.results_analysis import plot_Qsim_Qobs_Rain, \
                                       plot_soil_moisture_maps

if __name__ == '__main__':
    # Run a model simulation using the configuration in
    # model-simulation.ini
    pytopkapi.run('model-simulation.ini')

    # Plot the simulation results (rainfall-runoff graphics) using the
    # config in plot-flow-precip.ini
    plot_Qsim_Qobs_Rain.run('plot-flow-precip.ini')

    # Plot the simulation results (soil moisture maps) using the config in
    # plot-soil-moisture-maps.ini
    plot_soil_moisture_maps.run('plot-soil-moisture-maps.ini')
コード例 #6
0
ファイル: run_example.py プロジェクト: Castronova/PyTOPKAPI
import pytopkapi
from pytopkapi.results_analysis import plot_Qsim_Qobs_Rain, \
                                       plot_soil_moisture_maps

# Run a model simulation using the configuration in
# model-simulation.ini
pytopkapi.run('model-simulation.ini')

# Plot the simulation results (rainfall-runoff graphics) using the
# config in plot-flow-precip.ini
plot_Qsim_Qobs_Rain.run('plot-flow-precip.ini')


# Plot the simulation results (soil moisture maps) using the config in
# plot-soil-moisture-maps.ini
plot_soil_moisture_maps.run('plot-soil-moisture-maps.ini')
コード例 #7
0
def continuity_error(ini_fname, delta_t, cell_id, X, channel_indices):
    # run the model using the supplied configuration
    pytopkapi.run(ini_fname)

    # parse the config file
    config = SafeConfigParser()
    config.read(ini_fname)

    precip_fname = config.get('input_files', 'file_rain')
    ET_fname = config.get('input_files', 'file_ET')
    group_name = config.get('groups', 'group_name')
    result_fname = config.get('output_files', 'file_out')

    # write model version
    print 'PyTOPKAPI version = %s' % pytopkapi.__version__

    # compute the terms in the continuity eqn.
    initial_storage, final_storage = compute_storage(result_fname)
    print 'Initial storage = ', initial_storage
    print 'Final storage = ', final_storage

    precip_vol = compute_precip_volume(precip_fname, group_name, X)
    print 'Precipitation = ', precip_vol

    evapo_vol = compute_evapot_volume(result_fname, X)
    print 'Evapotranspiration = ', evapo_vol

    open_water_evap_vol = compute_evap_volume(result_fname, channel_indices)
    print 'Channel evaporation = ', open_water_evap_vol

    channel_runoff_vol = compute_channel_runoff(result_fname, delta_t, cell_id)
    print 'Channel runoff (outlet) = ', channel_runoff_vol

    overland_runoff_vol = compute_overland_runoff(result_fname, delta_t,
                                                  cell_id)
    print 'Overland runoff (outlet) = ', overland_runoff_vol

    soil_drainage_vol = compute_soil_drainage(result_fname, delta_t, cell_id)
    print 'Soil drainage (outlet) = ', soil_drainage_vol

    down_drainage_vol = compute_down_drainage(result_fname, delta_t, cell_id)
    print 'Non-channel drainage (outlet) = ', down_drainage_vol

    input = precip_vol
    output = evapo_vol \
             + open_water_evap_vol \
             + channel_runoff_vol \
             + down_drainage_vol

    delta_storage = final_storage - initial_storage
    error = delta_storage - (input - output)

    if precip_vol > 0:
        precip_error = abs((error / precip_vol) * 100.0)
    else:
        precip_error = None
    stor_error = abs((error / initial_storage) * 100.0)

    print 'Continuity error = ', error
    print 'Error as % precip. = ', precip_error
    print 'Error as % initial storage = ', stor_error

    os.remove(result_fname)

    return error, precip_error, stor_error
コード例 #8
0
import sys

sys.path.append('../../PyTOPKAPI')

import pytopkapi
from pytopkapi.results_analysis import plot_Qsim_Qobs_Rain, plot_soil_moisture_maps
from pytopkapi.parameter_utils.create_file import generate_param_file
from pytopkapi.parameter_utils import modify_file
import os

fn_ini = 'create_the_parameter_files/create_file.ini'
#
# # Generate Parameter Files
# generate_param_file(fn_ini, isolated_cells=False)
# print "Cell Parameter file created"
#
# # slope corrections
# modify_file.zero_slope_management('create_the_parameter_files/zero_slope_management.ini')
# print "Zero Slope corrections made"

# # run the model
pytopkapi.run('./run_the_model/TOPKAPI.ini')

# Plot the hydrograph
plot_Qsim_Qobs_Rain.run('./run_the_model/plot-flow-precip.ini')

# # # Plot soil moisture
# plot_soil_moisture_maps.run('./run_the_model/plot-soil-moisture-maps.ini')
コード例 #9
0
ファイル: continuity_tests.py プロジェクト: sahg/PyTOPKAPI
def continuity_error(ini_fname, delta_t, cell_id, X, channel_indices):
    # run the model using the supplied configuration
    pytopkapi.run(ini_fname)

    # parse the config file
    config = SafeConfigParser()
    config.read(ini_fname)

    precip_fname = config.get('input_files', 'file_rain')
    ET_fname = config.get('input_files', 'file_ET')
    group_name = config.get('groups', 'group_name')
    result_fname = config.get('output_files', 'file_out')

    # write model version
    print('PyTOPKAPI version = %s' % pytopkapi.__version__)

    # compute the terms in the continuity eqn.
    initial_storage, final_storage = compute_storage(result_fname)
    print('Initial storage = ', initial_storage)
    print('Final storage = ', final_storage)

    precip_vol = compute_precip_volume(precip_fname, group_name, X)
    print('Precipitation = ', precip_vol)

    evapo_vol = compute_evapot_volume(result_fname, X)
    print('Evapotranspiration = ', evapo_vol)

    open_water_evap_vol = compute_evap_volume(result_fname, channel_indices)
    print('Channel evaporation = ', open_water_evap_vol)

    channel_runoff_vol = compute_channel_runoff(result_fname, delta_t, cell_id)
    print('Channel runoff (outlet) = ', channel_runoff_vol)

    overland_runoff_vol = compute_overland_runoff(result_fname,
                                                  delta_t, cell_id)
    print('Overland runoff (outlet) = ', overland_runoff_vol)

    soil_drainage_vol = compute_soil_drainage(result_fname, delta_t, cell_id)
    print('Soil drainage (outlet) = ', soil_drainage_vol)

    down_drainage_vol = compute_down_drainage(result_fname, delta_t, cell_id)
    print('Non-channel drainage (outlet) = ', down_drainage_vol)

    input = precip_vol
    output = evapo_vol \
             + open_water_evap_vol \
             + channel_runoff_vol \
             + down_drainage_vol

    delta_storage = final_storage - initial_storage
    error = delta_storage - (input - output)

    if precip_vol > 0:
        precip_error = abs((error/precip_vol)*100.0)
    else:
        precip_error = None
    stor_error = abs((error/initial_storage)*100.0)

    print('Continuity error = ', error)
    print('Error as % precip. = ', precip_error)
    print('Error as % initial storage = ', stor_error)

    os.remove(result_fname)

    return error, precip_error, stor_error
コード例 #10
0
def run_pyTOPKAPI(ini_fname):
    import ConfigParser
    from ConfigParser import SafeConfigParser

    # initializing
    config = SafeConfigParser()
    config.read(ini_fname)
    print 'Reading initializing file: ', ini_fname
    # # Pre-processing # #
    preprocessing_input = config.getboolean('preprocessing', 'preprocessing_input')

    # # Create Parameter file (cell_param.dat) # #
    create_param_files = config.getboolean('create_param_files', 'create_param_files')
    if create_param_files:
        simulation_folder = config.get('create_param_files', 'simulation_folder')
        in_tiff_folder = config.get('create_param_files', 'in_tiff_folder')

        areaThreshold = config.getfloat('create_param_files', 'areaThreshold')
        cell_size = config.getfloat('create_param_files', 'cell_size')

        pVs_t0 = config.getfloat('create_param_files_parameters', 'pVs_t0')
        Vo_t0 = config.getfloat('create_param_files_parameters', 'Vo_t0')

    # # Simulation # #
    run_simulation = config.getboolean('simulation', 'run_simulation')

    if run_simulation:
        simulation_folder = config.get('simulation_forcing_files', 'simulation_folder')

        create_forcing_files = config.get('simulation_forcing_files', 'create_forcing_files')
        if create_forcing_files:
            # path to the forcing files
            precipitation_file = config.get('simulation_forcing_files', 'precipitation_file')
            ET_file = config.get('simulation_forcing_files', 'ET_file')

        # Simulations Results
        draw_hydrograph = config.getboolean('simulation_results', 'draw_hydrograph')
        draw_maps = config.getboolean('simulation_results', 'draw_maps')
        Q_observed_file = config.get('simulation_results', 'Q_observed_file')
        variable_id_for_maps = config.getfloat('simulation_results', 'variable_id_for_maps')

    # Calibration #
    # Do Calibration or not
    calibrate_the_model = config.getboolean('calibration', 'calibrate_the_model')

    if calibrate_the_model:
        # only executes if run_simulation is to be done
        pass


    ## MAIN PROGRAM ##
    if preprocessing_input:
        preprocess_input_tiffs(ini_fname)

    if create_param_files:
        if in_tiff_folder == '':
            in_tiff_folder = simulation_folder+'/TIFFS'

        # get cell size, input a tiff, if not given as input
        if cell_size == '':
            cell_size = get_cellSize(in_tiff_folder + '/mask_r.tif')

        # create ini : create_file.ini
        create_config_files_create_file(simulation_folder,in_tiff_folder,pVs_t0=pVs_t0, Vo_t0=Vo_t0)

        # create ini : zero_slope_management.ini
        create_config_files_zero_slope_mngmt(simulation_folder, cell_size)

        # create global parameter files
        # todo: automate Dt, and try W_min and W_max
        create_global_param(simulation_folder, A_thres=areaThreshold, X=cell_size, Dt=86400, W_min=5., W_Max=30.)

        # create the parameter file
        # using the built in create_file script
        # Also executes the zero slope corrections
        create_cell_param(simulation_folder+'/create_file.ini', simulation_folder+'/zero_slope_management.ini')

    if run_simulation:
        # create forcing files

        outlet_ID, no_of_cell = get_outletID_noOfCell(simulation_folder+'/cell_param.dat')
        if create_forcing_files:

            # create hdf5 rainfall and ET files
            # get total number of cells, and the
            # todo: ET is right now all zero. Change this.
            create_rain_ET_file(simulation_folder, no_of_cell, ppt_file_txt=precipitation_file)


            create_config_files_TOPKAPI_ini(simulation_folder, append_output_binary='False', fac_L=1.,
                                            fac_Ks=1., fac_n_o=1., fac_n_c=1., fac_th_s=1)

            # create ini: plot-flow-precip.ini
            create_config_files_plot_flow_precip(simulation_folder,Q_observed_file,outlet_ID)

            # create ini: plot-soil-moisture-map.ini
            create_config_files_plot_soil_moisture_map(simulation_folder)

        # RUN THE MODEL
        pytopkapi.run(simulation_folder + '/TOPKAPI.ini')

        if draw_hydrograph:
            plot_sim_observed(simulation_folder,Q_observed_file,outlet_ID)
        if draw_maps:
            from pytopkapi.results_analysis import plot_soil_moisture_maps
            plot_soil_moisture_maps.run(simulation_folder+'/plot-soil-moisture-maps.ini')

    if calibrate_the_model:
        simulation_folder = config.get('simulation_forcing_files', 'simulation_folder')
        Q_observed_file = config.get('simulation_results', 'Q_observed_file')

        if not os.path.exists(simulation_folder+'/results'):
            os.mkdir(simulation_folder+'/results')

        if not os.path.exists(simulation_folder + '/results/calibration'):
            os.mkdir(simulation_folder + '/results/calibration')

        # # create a blank file
        # open(simulation_folder + "/results/calibration/run_log.txt", 'a').close()

        # add headers to it, sort of metadata
        with open(simulation_folder + "/results/calibration/run_log.txt", 'a') as f:
            f.write('Calib param: fac_L|fac_Ks|fac_n_o|fac_n_c|fac_th_s '
                    '\t Numeric Param:  pvs_t0|vo_t0|qc_t0|kc '
                    '\t Errors: nash_value|RMSE|RMSE_norm|Bias_cumul|Diff_cumul|Abs_cumul|Err_cumul\n')

        # get the outlet_ID
        config = SafeConfigParser()
        config.read(simulation_folder+'/plot-flow-precip.ini')

        # outlet_ID
        outlet_id = config.getint('parameters', 'outlet_id')

        calib_factor_range = [x/100. for x in range(10,300,50)]

        i = 1

        # following 4 lines are for NUMERICAL PARAMETER
        for pvs_t0 in  [ 30., 95.]:
            for vo_t0 in [100.,2000.]:
                for qc_t0 in [0. ]:
                    for kc in [1]:

                        # following 5 lines are for CALIBRATION PARAMETER
                        for fac_L in  [0.1, 1., 4. ]:
                            for fac_Ks in [1., 4.]:
                               for fac_n_o in  [1.]:
                                    for fac_n_c in [1.]:
                                        for fac_th_s in [1]:

                                            calib_param = [fac_L,fac_Ks,fac_n_o,fac_n_c,fac_th_s ]
                                            numeric_param = [pvs_t0,vo_t0,qc_t0, kc ]

                                            run_name = str(i)+"_" + "-".join(str(item) for item in calib_param) + "-".join(str(item) for item in numeric_param)

                                            # get the error parameters (nash_value, RMSE, RMSE_norm, Bias_cumul, Diff_cumul, Abs_cumul, Err_cumul)
                                            # and the simulated discharge for each timestep
                                            # the model run using this function takes calibration parameter and numeric parameter as input

                                            error_checking_param, Q_sim = calibrate_model(run_name,simulation_folder, outlet_id, Q_observed_file, calib_param,numeric_param)

                                            with open(simulation_folder+'/results/calibration/run_log.txt', "a+") as run_log:
                                                run_log.write('\n'+run_name + '\t'
                                                              + "|".join(str(item) for item in calib_param)+  '\t'
                                                              +"|".join(str(item) for item in numeric_param)+  '\t'
                                                              +"|".join(str(item) for item in error_checking_param)
                                                              + '\tQ_sim: '
                                                              + " ".join(str(item) for item in Q_sim))

                                            i = i +1
コード例 #11
0
import sys
sys.path.append('../../PyTOPKAPI')

import pytopkapi
from pytopkapi.results_analysis import plot_Qsim_Qobs_Rain, plot_soil_moisture_maps
from pytopkapi.parameter_utils.create_file import generate_param_file
from pytopkapi.parameter_utils import modify_file
import os


fn_ini = 'create_the_parameter_files/create_file.ini'

# # Generate Parameter Files
# generate_param_file(fn_ini, isolated_cells=False)
# print "Cell Parameter file created"
#
# # slope corrections
# modify_file.zero_slope_management('create_the_parameter_files/zero_slope_management.ini')
# print "Zero Slope corrections made"

# run the model
pytopkapi.run('./run_the_model/TOPKAPI.ini')

# Plot the hydrograph
plot_Qsim_Qobs_Rain.run('./run_the_model/plot-flow-precip.ini')

# # # Plot soil moisture
# plot_soil_moisture_maps.run('./run_the_model/plot-soil-moisture-maps.ini')