APSIMInitiative / APSIM710

APSIM
https://www.apsim.info
30 stars 47 forks source link

Potential photosynthesis is calculated twice in Plant.cpp. Can lead to small errors towards end of grain filling #1763

Open BrianCollinss opened 4 years ago

BrianCollinss commented 4 years ago

In Plant, Line 374 and Line 424, potential photosynthesis is calculated: plant.doDmPotRUE();

Is there any reason for this repetation? With RUE model it doesn't make a difference. But with models that use swSupply, it does.

peter-devoil commented 4 years ago

I suspect it's because swim requires an estimate of Et at the start of the day - @hut104 would know for sure.

BrianCollinss commented 4 years ago

If that is the case, can we skip the second call if we have another photosyhtnesis model linked, which internally calculates water demand? I guess for RUE model it does make a difference. My guess is it's not needed if a photosynthesis module if it internally calculates water demand. I commented it out for such a model and nothing changed.

The following is with the RUE model.

With second call:

ApsimVersion = 7.10 rcfea03d9df461ae2c4efd18b8270414f50a44a0f
Title = New
           Date        biomass          yield  grain_protein     grain_size            CO2
   (dd/mm/yyyy)        (kg/ha)        (kg/ha)            (%)            (g)             ()
     10/10/1941        11499.9         4464.2         12.528          0.034        350.000
     29/09/1942         6670.8         2642.5         15.721          0.041        350.000
     18/10/1943        13085.4         5264.3         15.192          0.036        350.000
     11/10/1944        12089.1         4260.4         16.333          0.041        350.000
     10/10/1945        10063.1         3503.3         16.427          0.041        350.000
     14/10/1946        12064.4         4422.9         16.780          0.033        350.000
     15/10/1947        14056.6         5529.7         12.769          0.040        350.000
Without second call:
ApsimVersion = 7.10 rcfea03d9df461ae2c4efd18b8270414f50a44a0f
Title = New
           Date        biomass          yield  grain_protein     grain_size            CO2
   (dd/mm/yyyy)        (kg/ha)        (kg/ha)            (%)            (g)             ()
     10/10/1941        11503.3         4464.2         12.528          0.034        350.000
     29/09/1942         6688.3         2642.5         15.724          0.041        350.000
     18/10/1943        13099.7         5270.1         15.170          0.036        350.000
     11/10/1944        12131.9         4260.4         16.326          0.041        350.000
     10/10/1945        10127.3         3503.3         16.427          0.041        350.000
     14/10/1946        12227.7         4474.2         16.782          0.033        350.000
     15/10/1947        13988.3         5408.1         12.681          0.039        350.000
hut104 commented 4 years ago

In APSIM Classic, plants need to calculate potential water use in the prepare phase for SWIM to do water uptake, and potential growth and N demands to allow SWIM to do N uptake.

From: Ben (Behnam) Ababaei notifications@github.com Sent: Monday, 14 October 2019 9:30 AM To: APSIMInitiative/APSIMClassic APSIMClassic@noreply.github.com Cc: Huth, Neil (A&F, Toowoomba) Neil.Huth@csiro.au; Mention mention@noreply.github.com Subject: Re: [APSIMInitiative/APSIMClassic] Potential photosynthesis is calculated twice in Plant.cpp (#1763)

If that is the case, can we skip the first call if we have another photosyhtnesis model linked, which internally calculates water demand?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHubhttps://github.com/APSIMInitiative/APSIMClassic/issues/1763?email_source=notifications&email_token=AC2UVWTMM23TLEEOGIUKGZDQOOVP7A5CNFSM4I7Y75E2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEBDC3YA#issuecomment-541470176, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AC2UVWTYZRN3TSWZ3XO5Z73QOOVP7ANCNFSM4I7Y75EQ.

BrianCollinss commented 4 years ago

Thanks @hut104 and @peter-devoil . But I think the second call is not needed and should be removed. I tested it using Continuous Wheat from Examples. When the second call exists, since phenology().process() is called a couple of lines before that, APSIM uses RUE for the next day, which is smaller than the current day at the end of grain filling. Simply put, APSIM uses a smaller RUE than it must when the second call is made, leading to lower biomass. OR perhaps phenology().process() should be called within OnPrepare and before the first call to plant.doDmPotRUE().

     onPrepare
     RUE1.2400
     onProcess
     RUE1.2400
     onPrepare
     RUE1.2400
6 October 1941(Day of year=279), paddock.wheat: 
      stage 8.0 end_grain_fill
     onProcess
     RUE1.2400
                     biomass =        1149.99 (g/m^2)   lai          =   0.675 (m^2/m^2)
                     stover N conc =     0.31 (%)    extractable sw =   58.76 (mm)
     onPrepare
     RUE1.2400
     onProcess
     RUE0.0257

Here is an example (Continuous Wheat)

With the second call:

ApsimVersion = 7.10 rcfea03d9df461ae2c4efd18b8270414f50a44a0f
Title = New
           Date        biomass          yield  grain_protein     grain_size            CO2
   (dd/mm/yyyy)        (kg/ha)        (kg/ha)            (%)            (g)             ()
     10/10/1941        11499.9         4464.2         12.528          0.034        350.000
     29/09/1942         6670.8         2642.5         15.721          0.041        350.000
     18/10/1943        13085.4         5264.3         15.192          0.036        350.000

Without the second call:

ApsimVersion = 7.10 rcfea03d9df461ae2c4efd18b8270414f50a44a0f
Title = New
           Date        biomass          yield  grain_protein     grain_size            CO2
   (dd/mm/yyyy)        (kg/ha)        (kg/ha)            (%)            (g)             ()
     10/10/1941        11503.3         4464.2         12.528          0.034        350.000
     29/09/1942         6688.3         2642.5         15.724          0.041        350.000
     18/10/1943        13099.7         5270.1         15.170          0.036        350.000