Пример #1
0
    def setup_analytical_spin(self, number, st_yr_spin, en_yr_spin):
        """
        Adjust the CABLE namelist file with the various flags for the
        analytical spin step
        """
        out_log_fname = "%s_log_analytic_%d.txt" % (self.experiment_id, number)
        out_log_fname = os.path.join(self.log_dir, out_log_fname)
        if os.path.isfile(out_log_fname):
            os.remove(out_log_fname)

        self.out_fname_CASA = "%s_out_CASA_analytic_%d.nc" % \
                            (self.experiment_id, number)
        self.out_fname_CASA = os.path.join(self.output_dir,
                                           self.out_fname_CASA)
        if os.path.isfile(self.out_fname_CASA):
            os.remove(self.out_fname_CASA)

        replace_dict = {
            "filename%log": "'%s'" % (out_log_fname),
            "icycle":
            "%d" % (self.biogeochem + 10),  # Need to add 10 for spinup
            "cable_user%CASA_DUMP_READ": ".TRUE.",
            "cable_user%CASA_DUMP_WRITE": ".FALSE.",
            "cable_user%CASA_NREP": "1",
            "cable_user%SOIL_STRUC":
            "'default'",  # THIS needs to be default, we don't turn sli on here, presumably because it is too slow but does this make sense?
            "leaps": ".FALSE.",
            "spincasa": ".TRUE.",
            #"casafile%c2cdumppath": "'./'",
            "cable_user%CASA_SPIN_STARTYEAR": "%d" % (st_yr_spin),
            "cable_user%CASA_SPIN_ENDYEAR": "%d" % (en_yr_spin),
            "casafile%out": "'%s'" % (self.out_fname_CASA),
        }
        adjust_nml_file(self.nml_fname, replace_dict)
Пример #2
0
    def inital_spin_setup(self, site, met_fname, sci_config, number=None):
        """
        Initial setup for CASA spinup from zero
        """

        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)
        self.nml_fname = nml_fname

        out_fname = "%s_out_cable_spin_%d.nc" % (self.experiment_id, number)
        out_fname = os.path.join(self.output_dir, out_fname)

        out_log_fname = "%s_log_spin_%d.txt" % (self.experiment_id, number)
        out_log_fname = os.path.join(self.log_dir, out_log_fname)

        cable_rst_ofname = "%s_cable_rst_%d.nc" % (self.experiment_id, number)
        cable_rst_ofname = os.path.join(self.restart_dir, cable_rst_ofname)

        casa_rst_ofname = "%s_casa_rst_%d.nc" % (self.experiment_id, number)
        casa_rst_ofname = os.path.join(self.restart_dir, casa_rst_ofname)

        replace_dict = {
            "filename%met": "'%s'" % (met_fname),
            "filename%out": "'%s'" % (out_fname),
            "filename%log": "'%s'" % (out_log_fname),
            "filename%restart_in": "' '",
            "filename%restart_out": "'%s'" % (cable_rst_ofname),
            "casafile%cnpipool": "' '",
            "casafile%cnpepool": "'%s'" % (casa_rst_ofname),
            "filename%type": "'%s'" % (self.grid_fname),
            "filename%veg": "'%s'" % (self.veg_fname),
            "filename%soil": "'%s'" % (self.soil_fname),
            "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%RunIden": "'%s'" % (self.experiment_id),
            "cable_user%vcmax": "'%s'" % (self.vcmax),
            "l_vcmaxFeedbk": "%s" % (self.vcmax_feedback),
            "l_laiFeedbk": ".TRUE.",  # prognoistic LAI
            "icycle": "%d" % (self.biogeochem_id),
            "cable_user%CASA_OUT_FREQ": "'monthly'",
            "output%casa": ".TRUE.",
            "leaps": ".TRUE.",
            "cable_user%CASA_fromZero": ".TRUE.",
            "cable_user%CASA_DUMP_READ": ".FALSE.",
            "cable_user%CASA_DUMP_WRITE": ".FALSE.",
            "cable_user%CASA_NREP": "0",
            "spincasa": ".FALSE.",
            "output%restart": ".TRUE.",
        }
        # Make sure the dict isn't empty
        if bool(sci_config):
            replace_dict = merge_two_dicts(replace_dict, sci_config)

        adjust_nml_file(self.nml_fname, replace_dict)
Пример #3
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))
Пример #4
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")
Пример #5
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))
Пример #6
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))
Пример #7
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")
Пример #8
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))
Пример #9
0
    def setup_analytical_spin(self, st_yr, en_yr, number=None):
        """
        Adjust the CABLE namelist file with the various flags for the
        analytical spin step
        """

        out_fname = "%s_out_cable_aspin_%d.nc" % (self.experiment_id, number)
        out_fname = os.path.join(self.output_dir, out_fname)

        out_log_fname = "%s_log_aspin_%d.txt" % (self.experiment_id, number)
        out_log_fname = os.path.join(self.log_dir, out_log_fname)

        # This step doesn't write an output CABLE rst file.
        cable_rst_ifname = "%s_cable_rst_%d.nc" % (self.experiment_id,
                                                   number - 1)
        cable_rst_ifname = os.path.join(self.restart_dir, cable_rst_ifname)

        casa_rst_ifname = "%s_casa_rst_%d.nc" % (self.experiment_id,
                                                 number - 1)
        casa_rst_ifname = os.path.join(self.restart_dir, casa_rst_ifname)

        # This will overwrite the current restart file for CASA but that is
        # fine.
        casa_rst_ofname = "%s_casa_rst_%d.nc" % (self.experiment_id, number)
        casa_rst_ofname = os.path.join(self.restart_dir, casa_rst_ofname)

        replace_dict = {
            "filename%out": "'%s'" % (out_fname),
            "filename%log": "'%s'" % (out_log_fname),
            "filename%restart_in": "'%s'" % (cable_rst_ifname),
            "casafile%cnpipool": "'%s'" % (casa_rst_ifname),
            "casafile%cnpepool": "'%s'" % (casa_rst_ofname),
            #"casafile%cnpepool": "' '",
            "icycle":
            "%d" % (self.biogeochem_id + 10),  # Need to add 10 for spinup
            "cable_user%CASA_DUMP_READ": ".TRUE.",
            "cable_user%CASA_DUMP_WRITE": ".FALSE.",
            "cable_user%CASA_NREP": "1",
            "spincasa": ".TRUE.",
            "cable_user%CASA_SPIN_STARTYEAR": "%d" % (st_yr),
            "cable_user%CASA_SPIN_ENDYEAR": "%d" % (en_yr),
            #"cable_user%YearStart": "%d" % (st_yr),
            #"cable_user%YearEnd": "%d" % (en_yr),
            "output%restart": ".TRUE.",
            "leaps": ".FALSE.",
        }
        adjust_nml_file(self.nml_fname, replace_dict)
Пример #10
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))
Пример #11
0
    def setup_transient(self, st_yr_trans, en_yr_trans, st_yr, en_yr):
        """
        Adjust the CABLE namelist file for the transient run, i.e. 1850 to XXXX
        """
        replace_dict = {
            "RunType": '"transient"',
            "CO2NDepFile": "'%s'" % (self.co2_ndep_fname),
            "spinstartyear": "%d" % (st_yr),
            "spinendyear": "%d" % (en_yr),
        }
        adjust_nml_file(self.site_nml_fname, replace_dict)

        out_log_fname = "%s_log_transient.txt" % (self.experiment_id)
        out_log_fname = os.path.join(self.log_dir, out_log_fname)
        if os.path.isfile(out_log_fname):
            os.remove(out_log_fname)

        self.out_fname = "%s_out_cable_transient.nc" % (self.experiment_id)
        self.out_fname = os.path.join(self.output_dir, self.out_fname)
        if os.path.isfile(self.out_fname):
            os.remove(self.out_fname)

        self.out_fname_CASA = "%s_out_casa_transient.nc" % (self.experiment_id)
        self.out_fname_CASA = os.path.join(self.output_dir,
                                           self.out_fname_CASA)
        if os.path.isfile(self.out_fname_CASA):
            os.remove(self.out_fname_CASA)

        replace_dict = {
            "filename%out": "'%s'" % (self.out_fname),
            "casafile%out": "'%s'" % (self.out_fname_CASA),
            "filename%log": "'%s'" % (out_log_fname),
            "cable_user%CASA_DUMP_READ": ".FALSE.",
            "cable_user%CASA_DUMP_WRITE": ".FALSE.",
            "cable_user%CASA_NREP": "0",
            "cable_user%SOIL_STRUC": "'%s'" % (self.soil_flag),
            "output%restart": ".TRUE.",
            "output%averaging": "'monthly'",
            "spinup": ".FALSE.",
            "icycle": "%d" % (self.biogeochem),
            "cable_user%POPLUC": ".F.",
            "cable_user%YearStart": "%d" % (st_yr_trans),
            "cable_user%YearEnd": "%d" % (en_yr_trans),
        }
        adjust_nml_file(self.nml_fname, replace_dict)
Пример #12
0
    def setup_simulation(self, st_yr, en_yr):
        """
        Adjust the CABLE namelist file for the experiment years
        """
        replace_dict = {
            "RunType": '"historical"',
            "CO2NDepFile": "'%s'" % (self.co2_ndep_fname),
            "spinstartyear": "%d" % (st_yr),
            "spinendyear": "%d" % (en_yr)
        }
        adjust_nml_file(self.site_nml_fname, replace_dict)

        out_log_fname = "%s_log_simulation.txt" % (self.experiment_id)
        out_log_fname = os.path.join(self.log_dir, out_log_fname)
        if os.path.isfile(out_log_fname):
            os.remove(out_log_fname)

        self.out_fname = "%s_out_cable.nc" % (self.experiment_id)
        self.out_fname = os.path.join(self.output_dir, self.out_fname)

        self.out_fname_CASA = "%s_out_casa.nc" % (self.experiment_id)
        self.out_fname_CASA = os.path.join(self.output_dir,
                                           self.out_fname_CASA)

        if os.path.isfile(self.out_fname):
            os.remove(self.out_fname)

        replace_dict = {
            "filename%log": "'%s'" % (out_log_fname),
            "output%averaging": "'daily'",
            "icycle": "%d" % (self.biogeochem),
            "cable_user%YearStart": "%d" % (st_yr),
            "cable_user%YearEnd": "%d" % (en_yr),
            "filename%out": "'%s'" % (self.out_fname),
            "cable_user%POPLUC": ".F.",
            "cable_user%CASA_DUMP_READ": ".FALSE.",
            "cable_user%CASA_DUMP_WRITE": ".FALSE.",
            "cable_user%SOIL_STRUC": "'%s'" % (self.soil_flag),
            "spincasa": ".FALSE.",
            "spinup": ".FALSE.",
            "l_laiFeedbk": ".TRUE.",
            "output%averaging": "'all'",
            "casafile%out": "'%s'" % (self.out_fname_CASA),
        }
        adjust_nml_file(self.nml_fname, replace_dict)
Пример #13
0
    def setup_re_spin(self, number=None):
        """
        Adjust the CABLE namelist file with the various flags for another spin
        """
        out_log_fname = "%s_log_ccp%d.txt" % (self.experiment_id, number)
        out_log_fname = os.path.join(self.log_dir, out_log_fname)
        if os.path.isfile(out_log_fname):
            os.remove(out_log_fname)

        self.out_fname = "%s_out_cable_ccp%d.nc" % (self.experiment_id, number)
        self.out_fname = os.path.join(self.output_dir, self.out_fname)
        if os.path.isfile(self.out_fname):
            os.remove(self.out_fname)

        self.out_fname_CASA = "%s_out_CASA_ccp%d.nc" % \
                                (self.experiment_id, number)
        self.out_fname_CASA = os.path.join(self.output_dir,
                                           self.out_fname_CASA)
        if os.path.isfile(self.out_fname_CASA):
            os.remove(self.out_fname_CASA)

        replace_dict = {
            "filename%log": "'%s'" % (out_log_fname),
            "filename%restart_in": "'%s'" % (self.cable_restart_fname),
            "cable_user%climate_restart_in":
            "'%s'" % (self.climate_restart_fname),
            "cable_user%POP_restart_in": "'%s'" % (self.pop_restart_fname),
            "casafile%cnpipool": "'%s'" % (self.casa_restart_fname),
            "cable_user%POP_fromZero": ".F.",
            "cable_user%CASA_fromZero": ".F.",
            "cable_user%POP_rst": "'./'",
            "cable_user%CLIMATE_fromZero": ".F.",
            "cable_user%CASA_DUMP_READ": ".FALSE.",
            "cable_user%CASA_DUMP_WRITE": ".TRUE.",
            "cable_user%CASA_NREP": "0",
            "cable_user%SOIL_STRUC": "'%s'" % (self.soil_flag),
            "icycle": "%d" % (self.biogeochem),
            "leaps": ".TRUE.",
            "spincasa": ".FALSE.",
            #"casafile%c2cdumppath": "'./'",
            "output%restart": ".TRUE.",
            "filename%out": "'%s'" % (self.out_fname),
            "casafile%out": "'%s'" % (self.out_fname_CASA),
        }
        adjust_nml_file(self.nml_fname, replace_dict)
    def setup_nml_file(self):

        replace_dict = {
            "filename%met": "''",  # not needed for GSWP3 run
            "filename%type": "'%s'" % (self.grid_fname),
            "filename%veg": "'%s'" % (self.veg_fname),
            "filename%soil": "'%s'" % (self.soil_fname),
            "gswpfile%mask": "'%s'" % (self.mask_fname),
            "output%averaging": "'monthly'",
            "spinup": ".FALSE.",
            "cable_user%FWSOIL_SWITCH": "'standard'",
            "cable_user%GS_SWITCH": "'medlyn'",
            "cable_user%GW_MODEL": ".FALSE.",
            "cable_user%or_evap": ".FALSE.",
            "cable_user%GSWP3": ".TRUE.",
            "cable_user%MetType": "'gswp3'",
            "verbose": ".FALSE.",
        }
        adjust_nml_file(self.nml_fname, replace_dict)
Пример #15
0
    def setup_re_spin(self, number=None):
        """
        Adjust the CABLE namelist file with the various flags for another spin
        """

        out_fname = "%s_out_cable_spin_%d.nc" % (self.experiment_id, number)
        out_fname = os.path.join(self.output_dir, out_fname)

        out_log_fname = "%s_log_spin_%d.txt" % (self.experiment_id, number)
        out_log_fname = os.path.join(self.log_dir, out_log_fname)

        cable_rst_ifname = "%s_cable_rst_%d.nc" % (self.experiment_id,
                                                   number - 1)
        cable_rst_ifname = os.path.join(self.restart_dir, cable_rst_ifname)

        cable_rst_ofname = "%s_cable_rst_%d.nc" % (self.experiment_id, number)
        cable_rst_ofname = os.path.join(self.restart_dir, cable_rst_ofname)

        casa_rst_ifname = "%s_casa_rst_%d.nc" % (self.experiment_id,
                                                 number - 1)
        casa_rst_ifname = os.path.join(self.restart_dir, casa_rst_ifname)

        casa_rst_ofname = "%s_casa_rst_%d.nc" % (self.experiment_id, number)
        casa_rst_ofname = os.path.join(self.restart_dir, casa_rst_ofname)

        replace_dict = {
            "filename%out": "'%s'" % (out_fname),
            "filename%log": "'%s'" % (out_log_fname),
            "filename%restart_in": "'%s'" % (cable_rst_ifname),
            "filename%restart_out": "'%s'" % (cable_rst_ofname),
            "casafile%cnpipool": "'%s'" % (casa_rst_ifname),
            "casafile%cnpepool": "'%s'" % (casa_rst_ofname),
            "cable_user%CASA_fromZero": ".FALSE.",
            "cable_user%CASA_DUMP_READ": ".FALSE.",
            "cable_user%CASA_DUMP_WRITE": ".TRUE.",
            "cable_user%CASA_NREP": "0",
            "output%restart": ".TRUE.",
            "spincasa": ".FALSE.",
            "icycle": "%d" % (self.biogeochem_id),
            "leaps": ".TRUE.",
        }
        adjust_nml_file(self.nml_fname, replace_dict)
    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")
Пример #17
0
    def setup_simulation(self, met_fname, historical=True, number=None):
        """
        Adjust the CABLE namelist file for the experiment years
        """

        out_fname = "%s_out_cable_simulation.nc" % (self.experiment_id)
        out_fname = os.path.join(self.output_dir, out_fname)

        out_log_fname = "%s_log_simulation.txt" % (self.experiment_id)
        out_log_fname = os.path.join(self.log_dir, out_log_fname)

        cable_rst_ifname = "%s_cable_rst_%d.nc" % (self.experiment_id, number)
        cable_rst_ifname = os.path.join(self.restart_dir, cable_rst_ifname)

        casa_rst_ifname = "%s_casa_rst_%d.nc" % (self.experiment_id, number)
        casa_rst_ifname = os.path.join(self.restart_dir, casa_rst_ifname)

        if historical:

            out_fname = "%s_out_cable_historical.nc" % (self.experiment_id)
            out_fname = os.path.join(self.output_dir, out_fname)

            cable_rst_ofname = "%s_cable_rst_%d.nc" % (self.experiment_id,
                                                       number)
            cable_rst_ofname = os.path.join(self.restart_dir, cable_rst_ofname)

            casa_rst_ofname = "%s_casa_rst_%d.nc" % (self.experiment_id,
                                                     number)
            casa_rst_ofname = os.path.join(self.restart_dir, casa_rst_ofname)

            replace_dict = {
                "filename%met": "'%s'" % (met_fname),
                "filename%out": "'%s'" % (out_fname),
                "filename%log": "'%s'" % (out_log_fname),
                "filename%restart_in": "'%s'" % (cable_rst_ifname),
                "filename%restart_out": "'%s'" % (cable_rst_ofname),
                "casafile%cnpipool": "'%s'" % (casa_rst_ifname),
                "casafile%cnpepool": "'%s'" % (casa_rst_ofname),
                "icycle": "%d" % (self.biogeochem_id),
                "cable_user%CASA_DUMP_READ": ".FALSE.",
                "cable_user%CASA_DUMP_WRITE": ".FALSE.",
                "spincasa": ".FALSE.",
                "spinup": ".FALSE.",
                "output%restart": ".TRUE.",
                "output%averaging": "'daily'",
                "leaps": ".TRUE.",
            }
        else:
            replace_dict = {
                "filename%met": "'%s'" % (met_fname),
                "filename%out": "'%s'" % (out_fname),
                "filename%log": "'%s'" % (out_log_fname),
                "filename%restart_in": "'%s'" % (cable_rst_ifname),
                "filename%restart_out": "' '",
                "casafile%cnpipool": "'%s'" % (casa_rst_ifname),
                "casafile%cnpepool": "' '",
                "icycle": "%d" % (self.biogeochem_id),
                "cable_user%CASA_DUMP_READ": ".FALSE.",
                "cable_user%CASA_DUMP_WRITE": ".FALSE.",
                "spincasa": ".FALSE.",
                "spinup": ".FALSE.",
                "output%restart": ".FALSE.",
                "output%averaging": "'daily'",
                "leaps": ".TRUE.",
            }
        adjust_nml_file(self.nml_fname, replace_dict)

        return (out_fname)
    def create_new_nml_file(self, log_fname, out_fname, restart_in_fname,
                            restart_out_fname, year, co2_conc):

        out_log_fname = os.path.join(self.log_dir, log_fname)
        out_fname = os.path.join(self.output_dir, out_fname)

        # i.e. no restart file for first spinup year
        if restart_in_fname == "missing":
            restart_in_fname = ""
        else:
            restart_in_fname = os.path.join(self.restart_dir, restart_in_fname)
        restart_out_fname = os.path.join(self.restart_dir, restart_out_fname)

        if self.met_data == "GSWP3":
            rainf_fn = os.path.join(
                self.met_dir, "Rainf/GSWP3.BC.Rainf.3hrMap.%s.nc" % (year))
            snowf_fn = os.path.join(
                self.met_dir, "Snowf/GSWP3.BC.Snowf.3hrMap.%s.nc" % (year))
            lwdown_fn = os.path.join(
                self.met_dir, "LWdown/GSWP3.BC.LWdown.3hrMap.%s.nc" % (year))
            swdown_fn = os.path.join(
                self.met_dir, "SWdown/GSWP3.BC.SWdown.3hrMap.%s.nc" % (year))
            psurf_fn = os.path.join(
                self.met_dir, "PSurf/GSWP3.BC.PSurf.3hrMap.%s.nc" % (year))
            qair_fn = os.path.join(self.met_dir,
                                   "Qair/GSWP3.BC.Qair.3hrMap.%s.nc" % (year))
            wind_fn = os.path.join(self.met_dir,
                                   "Wind/GSWP3.BC.Wind.3hrMap.%s.nc" % (year))
            tair_fn = (os.path.join(
                self.met_dir, "Tair/GSWP3.BC.Tair.3hrMap.%s.nc" % (year)))
        elif self.met_data == "AWAP":
            rainf_fn = os.path.join(self.met_dir,
                                    "Rainf/AWAP.Rainf.3hr.%s.nc" % (year))
            snowf_fn = os.path.join(self.met_dir,
                                    "Snowf/AWAP.Snowf.3hr.%s.nc" % (year))
            lwdown_fn = os.path.join(self.met_dir,
                                     "LWdown/AWAP.LWdown.3hr.%s.nc" % (year))
            swdown_fn = os.path.join(self.met_dir,
                                     "SWdown/AWAP.SWdown.3hr.%s.nc" % (year))
            psurf_fn = os.path.join(self.met_dir,
                                    "PSurf/AWAP.PSurf.3hr.%s.nc" % (year))
            qair_fn = os.path.join(self.met_dir,
                                   "Qair/AWAP.Qair.3hr.%s.nc" % (year))
            wind_fn = os.path.join(self.met_dir,
                                   "Wind/AWAP.Wind.3hr.%s.nc" % (year))
            tair_fn = (os.path.join(self.met_dir,
                                    "Tair/AWAP.Tair.3hr.%s.nc" % (year)))

        replace_dict = {
            "filename%log": "'%s'" % (out_log_fname),
            "filename%out": "'%s'" % (out_fname),
            "filename%restart_in": "'%s'" % (restart_in_fname),
            "filename%restart_out": "'%s'" % (restart_out_fname),
            "fixedCO2": "%f" % (co2_conc),
            "ncciy": "%s" % (
                year
            ),  # 0 for not using gswp; 4-digit year input for year of gswp met
            "CABLE_USER%YearStart": "0",  # needs to be 0 so the ncciy is set
            "CABLE_USER%YearEnd": "0",  # needs to be 0 so the ncciy is set
            "gswpfile%rainf": "'%s'" % (rainf_fn),
            "gswpfile%snowf": "'%s'" % (snowf_fn),
            "gswpfile%LWdown": "'%s'" % (lwdown_fn),
            "gswpfile%SWdown": "'%s'" % (swdown_fn),
            "gswpfile%PSurf": "'%s'" % (psurf_fn),
            "gswpfile%Qair": "'%s'" % (qair_fn),
            "gswpfile%Tair": "'%s'" % (tair_fn),
            "gswpfile%wind": "'%s'" % (wind_fn),
        }
        adjust_nml_file(self.nml_fname, replace_dict)

        # save copy as we go for debugging - remove later
        shutil.copyfile(
            self.nml_fname,
            os.path.join(self.namelist_dir, "cable_%d.nml" % (year)))
Пример #19
0
    def initial_setup(self, st_yr_spin, en_yr_spin, st_yr, en_yr):
        """
        Setup CABLE namelist file for spinup from zero
        """

        if not os.path.exists(self.restart_dir):
            os.makedirs(self.restart_dir)

        if not os.path.exists(self.output_dir):
            os.makedirs(self.output_dir)

        if not os.path.exists(self.log_dir):
            os.makedirs(self.log_dir)

        if not os.path.exists(self.dump_dir):
            os.makedirs(self.dump_dir)

        base_nml_fn = os.path.join(self.grid_dir, "%s" % (self.nml_fname))

        if os.path.isfile(self.nml_fname):
            os.remove(self.nml_fname)
        shutil.copy(base_nml_fn, self.nml_fname)
        #shutil.copyfile(os.path.join(self.driver_dir, "cable.nml"),
        #                self.nml_fname)
        shutil.copyfile(os.path.join(self.driver_dir, "site.nml"),
                        self.site_nml_fname)

        self.out_fname = os.path.join(
            self.output_dir, "%s_out_cable_zero.nc" % (self.experiment_id))
        if os.path.isfile(self.out_fname):
            os.remove(self.out_fname)

        self.out_fname_CASA = os.path.join(
            self.output_dir, "%s_out_CASA_zero.nc" % (self.experiment_id))
        if os.path.isfile(self.out_fname_CASA):
            os.remove(self.out_fname_CASA)

        out_log_fname = os.path.join(self.log_dir,
                                     "%s_log_zero.txt" % (self.experiment_id))
        if os.path.isfile(out_log_fname):
            os.remove(out_log_fname)

        replace_dict = {
            "RunType": '"spinup"',
            "CO2NDepFile": "'%s'" % (self.co2_ndep_fname),
            "spinstartyear": "%d" % (st_yr),
            "spinendyear": "%d" % (en_yr),
            "spinCO2": "284.7",
            "spinNdep": "0.79",
            "spinPdep": "0.144",
        }
        adjust_nml_file(self.site_nml_fname, replace_dict)

        replace_dict = {
            "filename%met": "'%s'" % (self.met_fname),
            "filename%out": "'%s'" % (self.out_fname),
            "casafile%out": "'%s'" % (self.out_fname_CASA),
            "filename%log": "'%s'" % (out_log_fname),
            "filename%restart_out": "'%s'" % (self.cable_restart_fname),
            "cable_user%climate_restart_out":
            "'%s'" % (self.climate_restart_fname),
            "cable_user%POP_restart_out": "'%s'" % (self.pop_restart_fname),
            "casafile%cnpepool": "'%s'" % (self.casa_restart_fname),
            "filename%restart_in": "''",
            "cable_user%climate_restart_in": "''",
            "cable_user%POP_restart_in": "''",
            "filename%type": "'%s'" % self.grid_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%RunIden": "'%s'" % (self.experiment_id),
            "cable_user%POP_out": "'ini'",
            "cable_user%POP_rst": "'./'",
            "cable_user%POP_fromZero": ".T.",
            "cable_user%CASA_fromZero": ".T.",
            "cable_user%CLIMATE_fromZero": ".T.",
            "cable_user%CALL_CLIMATE": "%s" % (self.clim_flag),
            "cable_user%SOIL_STRUC": "'%s'" % (self.soil_flag),
            "cable_user%vcmax": "'%s'" % (self.vcmax),
            "cable_user%YearStart": "%d" % (st_yr_spin),
            "cable_user%YearEnd": "%d" % (en_yr_spin),
            "cable_user%CASA_SPIN_STARTYEAR": "%d" % (st_yr_spin),
            "cable_user%CASA_SPIN_ENDYEAR": "%d" % (en_yr_spin),
            "cable_user%CALL_POP": "%s" % (self.pop_flag),
            "output%averaging": "'monthly'",
            "icycle": "%d" % (self.biogeochem),
            "l_vcmaxFeedbk": "%s" % (self.vcmax_feedback),
            "spinup": ".FALSE.",
            "cable_user%FWSOIL_SWITCH": "'Haverd2013'",
            "cable_user%GS_SWITCH": "'medlyn'",
            "cable_user%limit_labile": ".F.",
            "cable_user%SSNOW_POTEV": "'P-M'",
            "cable_user%CASA_NREP":
            "0",  # number of times to repeat CASA forcing
            "delsoilM": "0.01",
            "delsoilT": "0.1",
            "output%casa": ".TRUE.",
            "output%grid": "'land'",
            "leaps": ".FALSE.",
            "cable_user%litter": ".true.",
            "cable_user%CASA_OUT_FREQ": "'monthly'",
            "cable_user%MetType": "'site'",
            "cable_user%PHENOLOGY_SWITCH": "'modis'",
        }
        adjust_nml_file(self.nml_fname, replace_dict)
        cwd = os.getcwd()
        (url, rev) = get_svn_info(cwd, self.cable_src)

        # delete local executable, copy a local copy and use that
        local_exe = "cable"
        if os.path.isfile(local_exe):
            os.remove(local_exe)
        shutil.copy(self.cable_exe, local_exe)
        self.cable_exe = local_exe

        return (url, rev)