Skip to content

Plant Nutrition

Crops in FarmDyn require nitrogen (N) and phosphate (P2O5) to grow. Conceptually, the nutrient need is opposed by different nutrient sources such as chemical fertilizer, manure, mineralization or deposition. In addition, nutrient losses such as ammonia volatilization are accounted. FarmDyn supports two differently detailed ways to calculate the plant nutrient need. The default approach and an approach in line with the fertilizing planning of the German Fertilization Ordinance. They differ amongst other by the calculation of the plant need, loss factors and accounted sources. In addition, different N fertilizing intensities and corresponding yield levels can be additionally used.

The fertilization is mainly reflected in two equations in the file general_cropping_module.gms. Nutrient need, sources and losses are listed in the equation NutBalCropSour and opposed in NutBalCrop_. This allows to clearly specify different elements of the fertilization and facilitates the validation.

The nutrient need p_nutNeed and the N fertilizing intensities are defined in the file cropping_nutNeed.gms. In the default fertilization approach, the nutrient need equals the nutrient content of the plants.

p_nutNeed(c_ss_t_i(curCrops(crops),soil,till,intens),nut,t)
         = sum( prods $ p_OCoeffC(crops,soil,till,intens,prods,t), p_OCoeffC(crops,soil,till,intens,prods,t)/p_storageLoss(prods)
             * (  p_nutContent(crops,prods,"conv",nut) $ (not sameas(till,"org"))
                + p_nutContent(crops,prods,"org",nut)  $      sameas(till,"org") )*10);

In the approach following the Fertilization Ordinance, the nutrient need is defined by the legislation.

p_nutNeed(c_ss_t_i(curCrops(crops),soil,till,"normal"),nut,t)
                 = p_NneedFerPlan(crops,soil,till,"normal",nut,t) ;

When switched on at the graphical user interface, the nutrient need for the different N fertilizing intensities is defined. Here, the calculation using the findings from Heyn and Olfs (2018) is exemplary shown. The underlying data can be found in the crop data file.

xxx

Beside the nutrient need, the variable v_nutOverNeed is introduced into the equation NutBalCropSour_ to allow manure application over plant need.

v_nutBalCropSour(fertSour,crops,plot,till,intens,nut,t,nCur)

       =E=

* --- N and P need of crops which needs to be met.

         [
            sum(plot_soil(plot,soil),

                       p_nutNeed(crops,soil,till,intens,nut,t)

            ) * v_cropHa(crops,plot,till,intens,t,nCur)

         ] $sameas(fertSour,"NBcropNeed")

*  ---  Application over plant need of fertilizer is possible (e.g. if mineralisation
*        plus atmospheric deposition exceed crop needs, or in case too much nutrients
*        from manure are available on farm)

         + v_nutOverNeed(crops,plot,till,intens,nut,t,nCur) $sameas(fertSour,"NBOverNeed")

Mineralization and deposition are further N sources of plants. Under the default setting, FarmDyn accounts N mineralization in spring and deposition. Following the fertilizer planning of the Fertilization Ordinance, only mineralization in spring is accounted.

+  [ sum( plot_soil(plot,soil),
                 $$iftheni.fert %Fertilization% == Default
*                    Default - p_basNut, refelct Nmin in spring and N depostion from atmosphere
                     sum(soilNutSour,p_basNut(crops,soil,till,soilNutSour,nut,t))
                 $$else.fert
*                   Fertilization Ordinance - Nmin in spring
                    p_NutFromSoil(crops,soil,till,nut,t)
                 $$endif.fert
              ) * v_cropHa(crops,plot,till,intens,t,nCur)
            ] $sameas(fertSour,"NBbasNut")

Chemical fertilizer application is summarized in the following part of the equation. In the case of the default setting, also losses from fertilizer application are included (not shown here).

+ [ sum ((curInputs(syntFertilizer),m),
                 v_syntDist(crops,plot,till,intens,syntFertilizer,t,nCur,m) * p_nutInSynt(syntFertilizer,nut))
           ] $ sameas(fertSour,"NBminFert")

Manure spreading and excretion on pasture (the latter not shown here) are other sources for N and P2O5. As illustrated exemplary for manure spreading, the amount of applied nutrients results from the volume of manure applied and the nutrient content.

+  [ sum ( (manApplicType_manType(ManApplicType,curManType),m)
                      $ (v_manDist.up(crops,plot,till,intens,manApplicType,curManType,t,nCur,m) ne 0),
                         v_manDist(crops,plot,till,intens,ManApplicType,curManType,t,nCur,m)

                   * sum( (manChain_applic(curManChain,ManApplicType),nut2_nut(nut2,nut)),
                           p_nut2inMan(nut2,curManType,curManChain))
                )
              ] $sameas(fertSour,"NBmanure")

N losses following manure application are calculated, using different emission factors for the two calculation schemes.

+ [  sum ( (manApplicType_manType(ManApplicType,curManType),m)
                    $ (v_manDist.up(crops,plot,till,intens,manApplicType,curManType,t,nCur,m) ne 0),
                       v_manDist(crops,plot,till,intens,ManApplicType,curManType,t,nCur,m)

                   $$iftheni.fert %Fertilization% == FertilizationOrdinance

*                        Fertilization Ordinance - standard loss factors provided by ordinance (N and P)
                          * sum( (manChain_applic(curManChain,ManApplicType),nut2_nut(nut2,nut)),
                              p_nut2inMan(nut2,curManType,curManChain)
                                 * (1 - p_nutEffFOPlan(curManType,crops,m,nut)))

                  $$else.fert
*                        Default - different N losses from env accounting module

                         * sum( (manChain_type(curManChain,curManType),nut2N),
                                      p_nut2inMan(nut2N,curManType,curManChain)
                                         * (     p_EFapplMan(curCrops,curManType,manApplicType,nut2N,m) $ sameas(nut2N,"NTAN")
                                              +  p_EFApplMin("N2O")
                                              +  p_EFApplMin("NOx")
                                              +  p_EFApplMin("N2")   )
                              ) $ sameas(nut,"N")
                  $$endif.fert
                )
              ] $sameas(fertSour,"NBmanureloss")

Finally, N fixation from legumes and N supply from vegetable residues are included.

$$iftheni.fert %Fertilization% ==  Default

     + [
           v_cropHa(crops,plot,till,intens,t,nCur) *   (  p_NfromLegumes(Crops,"org")  $ sameas(till,"org")
                                                        + p_NfromLegumes(Crops,"conv") $ (not sameas(till,"org"))
                                                       ) $ (sameas (nut,"N") )
        ]  $sameas(fertSour,"NBlegumes")

       $$iftheni.data "%database%" == "KTBL_database"
    + [
          v_cropHa(crops,plot,till,intens,t,nCur) *   (  p_NfromVegetables(Crops)
                                                      ) $ (sameas (nut,"N") )
       ]  $sameas(fertSour,"NBvegetables")
       $$endif.data
    $$endif.fert
   ;

The equation NutBalCrop_ opposes the described nutrient need, nutrient sources and losses.

NutBalCrop_(c_p_t_i(curCrops(crops),plot,till,intens),nut,t_n(tCur(t),nCur))
         $ ( (v_cropHa.up(crops,plot,till,intens,t,nCur) ne 0)  $ fertCrops(Crops) ) ..

* --- Equation which oppons nutrient need, sources and losses based on the
*     definition in NutBalCropSour_

* --- Nutrient need
          v_nutBalCropSour("NBcropNeed",crops,plot,till,intens,nut,t,nCur)

* --- Nutrient application over plant need with manure
         + v_nutBalCropSour("NBOverNeed",crops,plot,till,intens,nut,t,nCur)

            =E=

* --- Nutrient delivered from soil and air
          v_nutBalCropSour("NBbasNut",crops,plot,till,intens,nut,t,nCur)

* --- Nutrient from chemical fertilizer
        + v_nutBalCropSour("NBminFert",crops,plot,till,intens,nut,t,nCur)

* --- Losses from chemical fertilizer application
        - v_nutBalCropSour("NBminFertLoss",crops,plot,till,intens,nut,t,nCur)

        $$iftheni.man "%manure%" == "true"
* --- Nutrients from manure application
        + v_nutBalCropSour("NBmanure",crops,plot,till,intens,nut,t,nCur)

* --- Losses from manure application
        - v_nutBalCropSour("NBmanureloss",crops,plot,till,intens,nut,t,nCur)
        $$endif.man

        $$iftheni.dh "%cattle%" == "true"
* --- Nutrients on pasture from grazing
        + v_nutBalCropSour("NBpasture",crops,plot,till,intens,nut,t,nCur)

* --- Losses on pasture from grazing
        - v_nutBalCropSour("NBpastureLoss",crops,plot,till,intens,nut,t,nCur)

        $$endif.dh
* ---- Nutrients from legumes
        + v_nutBalCropSour("NBlegumes",crops,plot,till,intens,nut,t,nCur)

* ---- Nutrients from vegetables
        $$iftheni.data "%database%" == "KTBL_database"
        + v_nutBalCropSour("NBvegetables",crops,plot,till,intens,nut,t,nCur)
        $$endif.data
;

References

Heyn, J. and Olfs, H.-W. (2018): Wirkungen reduzierter N-Düngung auf Produktivität, Bodenfruchtbarkeit und N-Austragsgefährdung – Beurteilung anhand mehrjähriger Feldversuche. VDLUFA. Schriftenreihe 72.


  1. QIP solvers do not allow for equality conditions which are by definition non-convex