Ejemplo n.º 1
0
def run_experiment(ncores, codebase, diag, namelist, resolution, exp_name,
                   codebase_name):
    """
    Measure the time taken to complete the experiment
    :param ncores: Number of processor cores to be used
    :param codebase: One of: Held-Suarez, Grey-Mars
    :param diag: Diagnostics
    :param namelist: Namelist file
    :param resolution: Resolution of simulatin. One of: T21, T42, T85
    :param exp_name: Name of the experiment
    :param codebase_name: Name of the codebase
    """
    runs = 0
    if codebase_name == constants.HELD_SUAREZ:
        runs = 13
    elif codebase_name == constants.GREY_MARS:
        runs = 23

    exp = Experiment(f'{exp_name}', codebase=codebase)
    exp.rm_datadir()
    exp.clear_rundir()
    exp.diag_table = diag
    exp.namelist = namelist.copy()
    exp.set_resolution(*resolution)
    start = time.time()
    print(exp.namelist)
    exp.run(1, use_restart=False, num_cores=ncores)
    end = time.time()
    time_delta = end - start
    data = [ncores, resolution[0], 1, time_delta]
    write_to_csvfile(f'{constants.GFDL_BENCH}/{exp_name}', data)
    for i in range(
            2, runs
    ):  # 13 as there are 12 months (12+1=13)(241 for grey_mars) / (13 for held_suarez)
        start = time.time()
        exp.run(i, num_cores=ncores)
        end = time.time()
        time_delta = end - start
        data = [ncores, resolution[0], i, time_delta]
        write_to_csvfile(f'{constants.GFDL_BENCH}/{exp_name}', data)
Ejemplo n.º 2
0
        'fileset_write': 'single',                           # default: multi
    }
})


#Lets do a run!
if __name__=="__main__":
    cb.compile()

    NCORES=16
    RESOLUTION = 'T42', 25

    make_symmetric_values_list = [False, True]

    for make_symmetric_value in make_symmetric_values_list:

        exp = Experiment('project_2_held_suarez_make_symmetric_'+str(make_symmetric_value), codebase=cb)
        exp.clear_rundir()

        exp.diag_table = diag
        exp.inputfiles = inputfiles

        exp.namelist = namelist.copy()
        exp.namelist['spectral_dynamics_nml']['make_symmetric'] = make_symmetric_value

        exp.set_resolution(*RESOLUTION)

        exp.run(1, use_restart=False, num_cores=NCORES)
        for i in range(2,121):
            exp.run(i, num_cores=NCORES)
Ejemplo n.º 3
0
experiments = [('qflux_on', {
    'mixed_layer_nml': {
        'do_qflux': True
    },
    'qflux_nml': {
        'qflux_amp': 30.0,
        'qflux_width': 16.0
    }
}), ('qflux_off', {
    'mixed_layer_nml': {
        'do_qflux': False
    }
})]

exps = []
for exp_name, parameters in experiments:
    exp = Experiment(exp_name, codebase=codebase)

    # Get some basic paramters from config.py.  We'll copy the Namelist,
    # DiagTable and input files list so for multiple Experiments in the
    # same file, each has their own version that can be edited independently.
    exp.diag_table = diag_table.copy()
    exp.namelist = namelist.copy()
    exp.inputfiles = inputfiles[::]

    exp.set_resolution('T42', 40)
    exp.update_namelist(parameters)
    exps.append(exp)

run_cli(exps)