public const double DBsT = 0.04;     // base case yearly warming

        public void Run(Clock clock, IImpactAgricultureState state, IDimensions dimensions)
        {
            var s = state;
            var t = clock.Current;

            if (clock.IsFirstTimestep)
            {
                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.agrate[t, r] = s.agrbm[r] * Math.Pow(0.005 / DBsT, s.agnl) * s.agtime[r];
                }
            }
            else
            {
                foreach (var r in dimensions.GetValues <Region>())
                {
                    Double ypc   = s.income[t, r] / s.population[t, r] * 1000.0;
                    Double ypc90 = s.gdp90[r] / s.pop90[r] * 1000.0;

                    s.agrish[t, r] = s.agrish0[r] * Math.Pow(ypc / ypc90, -s.agel);
                }

                foreach (var r in dimensions.GetValues <Region>())
                {
                    var dtemp = Math.Abs(s.temp[t, r] - s.temp[t - 1, r]);

                    if (double.IsNaN(Math.Pow(dtemp / 0.04, s.agnl)))
                    {
                        s.agrate[t, r] = 0.0;
                    }
                    else
                    {
                        s.agrate[t, r] = s.agrbm[r] * Math.Pow(dtemp / 0.04, s.agnl) + (1.0 - 1.0 / s.agtime[r]) * s.agrate[t - 1, r];
                    }
                }

                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.aglevel[t, r] = s.aglparl[r] * s.temp[t, r] + s.aglparq[r] * Math.Pow(s.temp[t, r], 2.0);
                }

                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.agco2[t, r] = s.agcbm[r] / Math.Log(2.0) * Math.Log(s.acco2[t - 1] / s.co2pre);
                }

                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.agcost[t, r] = Math.Min(1.0, s.agrate[t, r] + s.aglevel[t, r] + s.agco2[t, r]) * s.agrish[t, r] * s.income[t, r];
                }
            }
        }
Пример #2
0
        public const double DBsT = 0.04; // base case yearly warming

        #endregion Fields

        #region Methods

        public void Run(Clock clock, IImpactAgricultureState state, IDimensions dimensions)
        {
            var s = state;
            var t = clock.Current;

            if (clock.IsFirstTimestep)
            {
                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.agrate[t, r] = s.agrbm[r] * Math.Pow(0.005 / DBsT, s.agnl) * s.agtime[r];
                }
            }
            else
            {
                foreach (var r in dimensions.GetValues<Region>())
                {
                    Double ypc = s.income[t, r] / s.population[t, r] * 1000.0;
                    Double ypc90 = s.gdp90[r] / s.pop90[r] * 1000.0;

                    s.agrish[t, r] = s.agrish0[r] * Math.Pow(ypc / ypc90, -s.agel);
                }

                foreach (var r in dimensions.GetValues<Region>())
                {
                    var dtemp = Math.Abs(s.temp[t, r] - s.temp[t - 1, r]);

                    if (double.IsNaN(Math.Pow(dtemp / 0.04, s.agnl)))
                        s.agrate[t, r] = 0.0;
                    else
                        s.agrate[t, r] = s.agrbm[r] * Math.Pow(dtemp / 0.04, s.agnl) + (1.0 - 1.0 / s.agtime[r]) * s.agrate[t - 1, r];
                }

                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.aglevel[t, r] = s.aglparl[r] * s.temp[t, r] + s.aglparq[r] * Math.Pow(s.temp[t, r], 2.0);
                }

                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.agco2[t, r] = s.agcbm[r] / Math.Log(2.0) * Math.Log(s.acco2[t - 1] / s.co2pre);
                }

                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.agcost[t, r] = Math.Min(1.0, s.agrate[t, r] + s.aglevel[t, r] + s.agco2[t, r]) * s.agrish[t, r] * s.income[t, r];
                }
            }
        }