Esempio n. 1
0
    def __init__(self, control, params, state, fluxes, met_data):
        """
        Parameters
        ----------
        control : integers, object
            model control flags
        params: floats, object
            model parameters
        state: floats, object
            model state
        fluxes : floats, object
            model fluxes
        met_data : floats, dictionary
            meteorological forcing data

        """
        self.params = params
        self.fluxes = fluxes
        self.control = control
        self.state = state
        self.met_data = met_data
        self.bw = Bewdy(self.control, self.params, self.state, self.fluxes,
                        self.met_data)
        self.wb = WaterBalance(self.control, self.params, self.state,
                               self.fluxes, self.met_data)

        if self.control.ps_pathway == "C3":
            self.mt = MateC3(self.control, self.params, self.state,
                             self.fluxes, self.met_data)
        else:
            self.mt = MateC4(self.control, self.params, self.state,
                             self.fluxes, self.met_data)

        self.sm = SoilMoisture(self.control, self.params, self.state,
                               self.fluxes)
        self.sm.initialise_parameters()

        self.rm = RootingDepthModel(d0x=self.params.d0x,
                                    r0=self.params.r0,
                                    top_soil_depth=self.params.topsoil_depth *
                                    const.MM_TO_M)

        # Window size = root lifespan in days...
        self.window_size = (int(1.0 /
                                (self.params.rdecay * const.NDAYS_IN_YR) *
                                const.NDAYS_IN_YR))
        #self.window_size = 365

        # If we don't have any information about the N&water limitation, i.e.
        # as would be the case with spin-up, assume that there is no limitation
        # to begin with.
        if self.state.prev_sma is None:
            self.state.prev_sma = 1.0

        self.sma = MovingAverageFilter(self.window_size, self.state.prev_sma)