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)