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)
'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)
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)