Code structure help

Discussion in 'Python' started by Martin De Kauwe, Mar 10, 2011.

  1. Hi,

    I have been working on re-writing a model in python and have been
    trying to adopt some of the advise offered on here to recent
    questions. However I am not sure how easy on the eye my final
    structure is and would appreciate any constructive comments/
    suggestions. So broadly the model estimates plant growth using a
    number of related sub functions which I have grouped into classes and
    they all live in separate files. My main issue at the moment is I
    think I have a lot of verbose class instances but I really can't see a
    better way to do it. I have left some of the bones of the code out but
    this is basically what would it looks like.

    thanks.


    import constants as const
    from file_parser import ConfigFileParser
    from plant_growth import PlantGrowth
    from print_outputs import PrintOutput
    from litter import LitterFlows
    from decomp import DecompFactors
    from soil_cnflows import CarbonFlows, NitrogenFlows
    from nmineralisation import Mineralisation
    from update_pools import CarbonPools, NitrogenPools
    ....etc...

    class ModelName(object):
    def __init__(self, cfg_fname=None):
    """ Set everything up

    Read meterological forcing file, any user adjusted files. If
    there
    is anything in the user file then adjust the model parameters,
    control
    or initial state attributes that are used within the code.
    """

    # sweep the cmd line
    options, args = cmdline_parser()

    # quit if asked only to dump default paramater files
    if options.DUMP_INPUT == True:
    ...call some stuff...

    # read in user defined variables (stored in dictionaries)
    pars = ConfigFileParser(cfg_fname=cfg_fname)
    (control, params, state, files, fluxes, met_data) =
    pars.main()

    # objects holding model state, fluxes, parameters and control
    flags
    self.met_data = met_data
    self.control = control
    self.params = params
    self.state = state
    self.fluxes = fluxes

    # instances of other model parts..
    self.pr = PrintOutput(self.params, self.state, self.fluxes,
    self.control, self.files, dump=False)

    # start date of simulation
    self.date = self.simulation_start_date()


    ...etc....

    def run_sim(self):

    mi = Mineralisation(self.control, self.params, self.state,
    self.fluxes)
    cf = CarbonFlows(self.control, self.params, self.state,
    self.fluxes)
    nf = NitrogenFlows(self.control, self.params, self.state,
    self.fluxes)
    de = Derive(self.control, self.params, self.state,
    self.fluxes)
    dc = DecompFactors(self.control, self.params, self.state,
    self.fluxes)
    lf = LitterFlows(self.control, self.params, self.state,
    self.fluxes)
    pg = PlantGrowth(self.control, self.params, self.state,
    self.fluxes,
    self.met_data)
    cpl = CarbonPools(self.control, self.params, self.state,
    self.fluxes)
    npl = NitrogenPools(self.control, self.params, self.state,
    self.fluxes)

    for i in self.met_data.doy:
    project_day = i - 1

    # N:C ratios
    leafnc, rootnc = self.leaf_root_ncratio()

    # litterfall rate: C and N fluxes
    lf.flows(leafnc, rootnc)

    # plant growth
    pg.grow(project_day, self.date, leafnc)

    # calculate model decay rates
    dc.decay_rates()

    # soil model fluxes
    cf.calculate_cflows()
    nf.calculate_nflows()

    # N uptake and loss
    mi.calculate_mineralisation()

    # carbon sink or source?
    self.fluxes.nep = (self.fluxes.npp -
    self.fluxes.hetero_resp -
    self.fluxes.ceaten *
    (1. - self.params.fracfaeces))

    # soil model - update pools
    cact, cslo, cpas = cpl.calculate_cpools()
    npl.calculate_npools(cact, cslo, cpas)

    if self.control.print_options == 1:
    self.pr.print_state()
    self.pr.print_fluxes()

    self.increment_date()

    if self.control.print_options == 2:
    self.pr.print_state()
    self.pr.print_fluxes()

    # house cleaning, close ouput files
    self.pr.tidy_up()
    Martin De Kauwe, Mar 10, 2011
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Excluded_Middle

    Pointers to structure and array of structure.

    Excluded_Middle, Oct 24, 2004, in forum: C Programming
    Replies:
    4
    Views:
    734
    Martin Ambuhl
    Oct 26, 2004
  2. Leo Nunez
    Replies:
    3
    Views:
    1,187
    Neil Kurzman
    Feb 9, 2005
  3. Replies:
    2
    Views:
    588
  4. Replies:
    9
    Views:
    25,228
    Lal Bahadur Singh
    Nov 11, 2011
  5. meisterbartsch
    Replies:
    2
    Views:
    763
    meisterbartsch
    Jun 12, 2007
Loading...

Share This Page