def worker(self, met_files, url, rev): for fname in met_files: site = os.path.basename(fname).split(".")[0].split("_")[0] base_nml_fn = os.path.join(self.grid_dir, "%s" % (self.nml_fname)) nml_fname = "cable_%s.nml" % (site) shutil.copy(base_nml_fn, nml_fname) (out_fname, out_log_fname) = self.clean_up_old_files(site) # ./plot_E_vs_psi_leaf.py, looks a reasonable match to obs # we don't hit the max, but the bulk of the values are in the right place Kmax_value = 0.4 #b_plant = 3.7616378326944595 # calculated from vlc #c_plant = 10.289003851919992 # calculated from vlc b_plant = 3.7989857501917563 # calculated from vlc, using p98 c_plant = 8.054967903830414 # calculated from vlc, using p98 vcmax = 30. # Belinda estimated this from their data fname = change_traits(fname, site, Kmax_value, b_plant, c_plant, vcmax, self.zse) # Add LAI to met file? if self.fixed_lai is not None or self.lai_dir is not None: fname = change_LAI(fname, site, fixed=self.fixed_lai, lai_dir=self.lai_dir) replace_dict = { "filename%met": "'%s'" % (fname), "filename%out": "'%s'" % (out_fname), "filename%log": "'%s'" % (out_log_fname), "filename%restart_out": "' '", "filename%type": "'%s'" % (self.grid_fname), "output%restart": ".FALSE.", #"fixedCO2": "%.2f" % (self.co2_conc), "casafile%phen": "'%s'" % (self.phen_fname), "casafile%cnpbiome": "'%s'" % (self.cnpbiome_fname), "cable_user%GS_SWITCH": "'medlyn'", "cable_user%GW_MODEL": ".FALSE.", "cable_user%or_evap": ".FALSE.", "redistrb": ".FALSE.", "spinup": ".FALSE.", "cable_user%litter": ".TRUE.", "cable_user%FWSOIL_SWITCH": "'%s'" % (self.fwsoil), } adjust_nml_file(nml_fname, replace_dict) self.run_me(nml_fname) add_attributes_to_output_file(nml_fname, out_fname, url, rev) shutil.move(nml_fname, os.path.join(self.namelist_dir, nml_fname)) if self.fixed_lai is not None or self.lai_dir is not None: os.remove("%s_tmp.nc" % (site))
def worker(self, met_files, url, rev): fname = met_files site = os.path.basename(fname).split(".")[0].split("_")[0] print(fname) ring = os.path.basename(fname).split(".")[0].split("_")[2] base_nml_fn = os.path.join(self.grid_dir, "%s" % (self.nml_fname)) nml_fname = "cable_%s_%s_%s.nml" % (site, self.met_fname, self.case_name) shutil.copy(base_nml_fn, nml_fname) (out_fname, out_log_fname, out_restart_fname) = self.clean_up_old_files(site, ring) # Add LAI to met file? if self.fixed_lai is not None or self.lai_dir is not None: fname = change_LAI(fname, site, fixed=self.fixed_lai, lai_dir=self.lai_dir) replace_dict = { "filename%met": "'%s'" % (fname), "filename%out": "'%s'" % (out_fname), "filename%log": "'%s'" % (out_log_fname), "spinup": ".FALSE.", #"filename%restart_in": "'%s'" % (out_restart_fname), "filename%restart_out": "'%s'" % (out_restart_fname), "filename%type": "'%s'" % (self.grid_fname), #"filename%gw_elev": "'%s'" % (self.elev_fname) "filename%veg": "'%s'" % (self.veg_fname), "filename%soil": "'%s'" % (self.soil_fname), "output%restart": ".TRUE.", "casafile%phen": "'%s'" % (self.phen_fname), "casafile%cnpbiome": "'%s'" % (self.cnpbiome_fname), #"cable_user%FWSOIL_SWITCH": "'Haverd2013'", #"cable_user%FWSOIL_SWITCH": "'standard'", "cable_user%FWSOIL_SWITCH": "'hie_exp'", "cable_user%GS_SWITCH": "'medlyn'", "cable_user%GW_MODEL": ".TRUE.", "cable_user%or_evap": ".FALSE.", "cable_user%MetType": "site", "gw_params%BC_hysteresis": ".FALSE.", "gw_params%HC_SWC": "FALSE", "gw_params%ssgw_ice_switch": ".TRUE.", "cable_user%litter": ".TRUE.", } adjust_nml_file(nml_fname, replace_dict) self.run_me(nml_fname) add_attributes_to_output_file(nml_fname, out_fname, url, rev) shutil.move(nml_fname, os.path.join(self.namelist_dir, nml_fname)) if self.fixed_lai is not None or self.lai_dir is not None: os.remove("%s_tmp.nc" % (site))
def worker(self, met_files, url, rev): for fname in met_files: site = os.path.basename(fname).split(".")[0] base_nml_fn = os.path.join(self.grid_dir, "%s" % (self.nml_fname)) nml_fname = "cable_%s.nml" % (site) shutil.copy(base_nml_fn, nml_fname) (out_fname, out_log_fname) = self.clean_up_old_files(site) # Add LAI to met file? if self.fixed_lai is not None or self.lai_dir is not None: fname = change_LAI(fname, site, fixed=self.fixed_lai, lai_dir=self.lai_dir) if self.fwsoil == "hydraulics": if site == "WombatStateForestOzFlux2": fname = change_iveg(fname, site, 20) else: fname = change_iveg(fname, site, 19) elif self.fwsoil == "standard": fname = change_iveg(fname, site, 2) replace_dict = { "filename%met": "'%s'" % (fname), "filename%out": "'%s'" % (out_fname), "filename%log": "'%s'" % (out_log_fname), "filename%restart_out": "' '", "filename%type": "'%s'" % (self.grid_fname), "filename%veg": "'%s'" % (self.veg_fname), "filename%soil": "'%s'" % (self.soil_fname), "output%restart": ".FALSE.", "fixedCO2": "%.2f" % (self.co2_conc), "casafile%phen": "'%s'" % (self.phen_fname), "casafile%cnpbiome": "'%s'" % (self.cnpbiome_fname), "cable_user%GS_SWITCH": "'medlyn'", "cable_user%GW_MODEL": ".FALSE.", "cable_user%or_evap": ".FALSE.", "redistrb": ".FALSE.", "spinup": ".TRUE.", "cable_user%FWSOIL_SWITCH": "'%s'" % (self.fwsoil), } adjust_nml_file(nml_fname, replace_dict) self.run_me(nml_fname) add_attributes_to_output_file(nml_fname, out_fname, url, rev) shutil.move(nml_fname, os.path.join(self.namelist_dir, nml_fname)) if self.fixed_lai is not None or self.lai_dir is not None: os.remove("%s_tmp.nc" % (site)) os.remove("new_sumbal")
def worker(self, met_files, url, rev, param_names, param_values, out_fname, out_log_fname): for fname in met_files: site = os.path.basename(fname).split("_")[0] base_nml_fn = os.path.join(self.grid_dir, "%s" % (self.nml_fname)) nml_fname = "cable_%s.nml" % (site) shutil.copy(base_nml_fn, nml_fname) (out_fname, out_log_fname) = self.clean_up_old_files(site) # Add LAI to met file? if self.fixed_lai is not None or self.lai_dir is not None: fname = change_LAI(fname, site, fixed=self.fixed_lai, lai_dir=self.lai_dir) # Set tree, grass and bare fracs, measurement height etc fname = set_site_info(fname, site) replace_dict = { "filename%met": "'%s'" % (fname), "filename%out": "'%s'" % (out_fname), "filename%log": "'%s'" % (out_log_fname), "filename%restart_out": "' '", "filename%type": "'%s'" % (self.grid_fname), "filename%veg": "'%s'" % (self.veg_fname), "filename%soil": "'%s'" % (self.soil_fname), "output%restart": ".FALSE.", #"output%patch": ".TRUE.", # get all patches "output%patch": ".FALSE.", # get all patches "fixedCO2": "%.2f" % (self.co2_conc), "casafile%phen": "'%s'" % (self.phen_fname), "casafile%cnpbiome": "'%s'" % (self.cnpbiome_fname), "cable_user%FWSOIL_SWITCH": "'standard'", "cable_user%GS_SWITCH": "'medlyn'", "cable_user%GW_MODEL": ".FALSE.", "cable_user%or_evap": ".FALSE.", "spinup": ".FALSE.", "verbose": ".FALSE.", } adjust_nml_file(nml_fname, replace_dict) self.run_me(nml_fname) add_attributes_to_output_file(nml_fname, out_fname, url, rev) shutil.move(nml_fname, os.path.join(self.namelist_dir, nml_fname)) if self.fixed_lai is not None or self.lai_dir is not None: os.remove("%s_tmp.nc" % (site))
def worker(self, met_files, url, rev): for fname in met_files: species = '_'.join((os.path.basename(fname).split("_")[2:4])) num = os.path.basename(fname).split("_")[-1].split(".")[0] site = "%s_%s" % (species, num) base_nml_fn = os.path.join(self.grid_dir, "%s" % (self.nml_fname)) nml_fname = "cable_%s.nml" % (site) shutil.copy(base_nml_fn, nml_fname) (out_fname, out_log_fname) = self.clean_up_old_files(site) spp_traits = self.traits[self.traits.species == \ species.replace("_", " ")] if len(spp_traits) > 0: b_plant = float(spp_traits.b_plant.values[0]) c_plant = float(spp_traits.c_plant.values[0]) vcmax = float(spp_traits.vcmax.values[0]) fname_new = change_traits(fname, id, site, b_plant, c_plant, vcmax) replace_dict = { "filename%met": "'%s'" % (fname_new), "filename%out": "'%s'" % (out_fname), "filename%log": "'%s'" % (out_log_fname), "filename%restart_out": "' '", "filename%type": "'%s'" % (self.grid_fname), "output%restart": ".FALSE.", "fixedCO2": "%.2f" % (self.co2_conc), "casafile%phen": "'%s'" % (self.phen_fname), "casafile%cnpbiome": "'%s'" % (self.cnpbiome_fname), "cable_user%GS_SWITCH": "'medlyn'", "cable_user%GW_MODEL": ".FALSE.", "cable_user%or_evap": ".FALSE.", "redistrb": ".FALSE.", "spinup": ".FALSE.", "cable_user%litter": ".TRUE.", "cable_user%FWSOIL_SWITCH": "'%s'" % (self.fwsoil), } adjust_nml_file(nml_fname, replace_dict) self.run_me(nml_fname) add_attributes_to_output_file(nml_fname, out_fname, url, rev) shutil.move(nml_fname, os.path.join(self.namelist_dir, nml_fname)) os.remove(fname_new) os.remove("new_sumbal")
def worker(self, met_files, url, rev, sci_config, repo_id, sci_id): cwd = os.getcwd() for fname in met_files: site = os.path.basename(fname).split(".")[0] base_nml_fn = os.path.join(self.grid_dir, "%s" % (self.nml_fname)) nml_fname = "cable_%s_R%s_S%s.nml" % (site, repo_id, sci_id) shutil.copy(base_nml_fn, nml_fname) #nml_fname = os.path.join(cwd, nml_fname) (out_fname, out_log_fname) = self.clean_up_old_files(site, repo_id, sci_id) # Add LAI to met file? if self.fixed_lai is not None or self.lai_dir is not None: fname = change_LAI(fname, site, fixed=self.fixed_lai, lai_dir=self.lai_dir) replace_dict = { "filename%met": "'%s'" % (fname), "filename%out": "'%s'" % (out_fname), "filename%log": "'%s'" % (out_log_fname), "filename%restart_out": "' '", "filename%type": "'%s'" % (self.grid_fname), "filename%veg": "'%s'" % (self.veg_fname), "filename%soil": "'%s'" % (self.soil_fname), "output%restart": ".FALSE.", "fixedCO2": "%.2f" % (self.co2_conc), "casafile%phen": "'%s'" % (self.phen_fname), "casafile%cnpbiome": "'%s'" % (self.cnpbiome_fname), "spinup": ".FALSE.", } # Make sure the dict isn't empty if bool(sci_config): replace_dict = merge_two_dicts(replace_dict, sci_config) adjust_nml_file(nml_fname, replace_dict) self.run_me(nml_fname) add_attributes_to_output_file(nml_fname, out_fname, sci_config, url, rev) shutil.move(nml_fname, os.path.join(self.namelist_dir, nml_fname)) if self.fixed_lai is not None or self.lai_dir is not None: os.remove("%s_tmp.nc" % (site))
def worker(self, met_files, url, rev): for fname in met_files: site = os.path.basename(fname).split(".")[0] print(site) base_nml_fn = os.path.join(self.grid_dir, "%s" % (self.nml_fname)) nml_fname = "cable_%s.nml" % (site) shutil.copy(base_nml_fn, nml_fname) (out_fname, out_log_fname) = self.clean_up_old_files(site) # Add LAI to met file? if self.fixed_lai is not None or self.lai_dir is not None: fname = change_LAI(fname, site, fixed=self.fixed_lai, lai_dir=self.lai_dir) replace_dict = { "filename%met": "'%s'" % (fname), "filename%out": "'%s'" % (out_fname), "filename%log": "'%s'" % (out_log_fname), "filename%restart_out": "' '", "filename%type": "'%s'" % (self.grid_fname), "filename%veg": "'%s'" % (self.veg_fname), "filename%soil": "'%s'" % (self.soil_fname), "output%restart": ".FALSE.", "fixedCO2": "%.2f" % (self.co2_conc), "casafile%phen": "'%s'" % (self.phen_fname), "casafile%cnpbiome": "'%s'" % (self.cnpbiome_fname), "cable_user%FWSOIL_SWITCH": "'Haverd2013'", "cable_user%GS_SWITCH": "'medlyn'", "cable_user%GW_MODEL": ".FALSE.", "cable_user%or_evap": ".FALSE.", #"elev_fname": "'%s'" % (self.elev_fname), } adjust_nml_file(nml_fname, replace_dict) self.run_me(nml_fname) add_attributes_to_output_file(nml_fname, out_fname, url, rev) shutil.move(nml_fname, os.path.join(self.namelist_dir, nml_fname)) if self.fixed_lai is not None or self.lai_dir is not None: os.remove("%s_tmp.nc" % (site))
def clean_up(self, url, rev, end=True, tag=None): """ Move restart files to a directory and delete various files we no longer need that CABLE spits out as it spins up. """ add_attributes_to_output_file(self.nml_fname, self.out_fname, url, rev) add_attributes_to_output_file(self.nml_fname, self.out_fname_CASA, url, rev) if end: for f in glob.glob("c2c_*_dump.nc"): shutil.move(f, os.path.join(self.dump_dir, f)) f = "cnpfluxOut.csv" if os.path.isfile(f): os.remove(f) f = "new_sumbal" if os.path.isfile(f): os.remove(f) #for f in glob.glob("*.out"): # os.remove(f) for f in glob.glob("restart_*.nc"): os.remove(f) else: old = self.cable_restart_fname new = "%s_%s.nc" % (old[:-3], tag) if os.path.isfile(old): shutil.copyfile(old, new) old = self.casa_restart_fname new = "%s_%s.nc" % (old[:-3], tag) if os.path.isfile(old): shutil.copyfile(old, new) old = self.climate_restart_fname new = "%s_%s.nc" % (old[:-3], tag) if os.path.isfile(old): shutil.copyfile(old, new) if self.use_pop: old = self.pop_restart_fname new = "%s_%s.nc" % (old[:-3], tag) if os.path.isfile(old): shutil.copyfile(old, new)
def worker(self, met_files, url, rev, sci_config): num = 0 not_stabilised = True for fname in met_files: site = os.path.basename(fname).split(".")[0].split("_")[0] self.experiment_id = "%s_%s" % (site, self.biogeochem_cyc) print("\n%s\n" % (site)) (st_yr, en_yr) = self.get_met_years(fname) (fname_spin, fname_trans, fname_sim) = self.generate_met_files(site, st_yr, en_yr, fname) # Initial setup and first spin ... print("\nSpinup stage: %d\n" % (num)) self.inital_spin_setup(site, fname_spin, sci_config, num) self.run_me() self.clean_up(num, tag="spin") num += 1 while not_stabilised: print("\nSpinup stage: %d\n" % (num)) self.setup_re_spin(number=num) self.run_me() self.clean_up(num, tag="spin") print("\nAnalytical stage: %d\n" % (num)) self.setup_analytical_spin(st_yr, en_yr, number=num) self.run_me() self.clean_up(num, tag="spin_analytic") not_stabilised = check_steady_state(self.experiment_id, self.restart_dir, num) num += 1 # one final spin print("\nFinal spin\n") self.setup_re_spin(number=num) self.run_me() # Run transiet simulation from 1850 print("\nHistorical\n") (out_fname) = self.setup_simulation(fname_trans, historical=True, number=num) self.run_me() self.clean_up(number=None, tag="historical") print("\nSimulation\n") (out_fname) = self.setup_simulation(fname_sim, historical=False, number=num) self.run_me() self.clean_up(number=None, tag="simulation") add_attributes_to_output_file(self.nml_fname, out_fname, url, rev) ofname = os.path.join(self.namelist_dir, self.nml_fname) shutil.move(self.nml_fname, ofname)
def worker(self, met_files, url, rev): for fname in met_files: site = "AWAP_pixel" lat = os.path.basename(fname).split("_")[3] lon1 = os.path.basename(fname).split("_")[4].split(".")[0] lon2 = os.path.basename(fname).split("_")[4].split(".")[1] lon = "%s.%s" % (lon1, lon2) lat = float(lat) lon = float(lon) base_nml_fn = os.path.join(self.grid_dir, "%s" % (self.nml_fname)) nml_fname = "cable_%s.nml" % (site) shutil.copy(base_nml_fn, nml_fname) (out_fname, out_log_fname) = self.clean_up_old_files(site) # Add LAI to met file? if self.fixed_lai is not None or self.lai_dir is not None: fname = change_LAI(fname, site, fixed=self.fixed_lai, lai_dir=self.lai_dir) if self.fwsoil == "hydraulics": if lat == -30.40 and lon == 151.60: fname = change_iveg(fname, site, 21) # GRW if lat == -31.10 and lon == 142.50: fname = change_iveg(fname, site, 21) # GRW elif lat == -31.10 and lon == 150.95: fname = change_iveg(fname, site, 22) # SAW elif lat == -30.00 and lon == 141.40: fname = change_iveg(fname, site, 22) # SAW else: print("problem") sys.exit() replace_dict = { "filename%met": "'%s'" % (fname), "filename%out": "'%s'" % (out_fname), "filename%log": "'%s'" % (out_log_fname), "filename%restart_out": "' '", "filename%type": "'%s'" % (self.grid_fname), "filename%veg": "'%s'" % (self.veg_fname), "filename%soil": "'%s'" % (self.soil_fname), "output%restart": ".FALSE.", "fixedCO2": "%.2f" % (self.co2_conc), "casafile%phen": "'%s'" % (self.phen_fname), "casafile%cnpbiome": "'%s'" % (self.cnpbiome_fname), "cable_user%GS_SWITCH": "'medlyn'", "cable_user%GW_MODEL": ".FALSE.", "cable_user%or_evap": ".FALSE.", "redistrb": ".FALSE.", "spinup": ".FALSE.", "cable_user%litter": ".TRUE.", "cable_user%FWSOIL_SWITCH": "'%s'" % (self.fwsoil), } adjust_nml_file(nml_fname, replace_dict) self.run_me(nml_fname) add_attributes_to_output_file(nml_fname, out_fname, url, rev) shutil.move(nml_fname, os.path.join(self.namelist_dir, nml_fname)) if self.fixed_lai is not None or self.lai_dir is not None: os.remove("%s_tmp.nc" % (site)) os.remove("new_sumbal")