예제 #1
0
    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))
예제 #2
0
    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))
예제 #3
0
    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")
예제 #4
0
    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))
예제 #5
0
    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")
예제 #6
0
    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))
예제 #7
0
    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))
예제 #8
0
    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)
예제 #9
0
    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")