コード例 #1
0
        public void Run(Clock clock, IMarginalEmissionState state, IDimensions dimensions)
        {
            var t = clock.Current;
            var s = state;

            if ((t.Value >= s.emissionperiod.Value) && (t.Value < (s.emissionperiod.Value + s.impulselength)))
            {
                s.modemission[t] = s.emission[t] + 1;
            }
            else
                s.modemission[t] = s.emission[t];
        }
コード例 #2
0
        public void Run(Clock clock, IClimateSO2CycleState state, IDimensions dimensions)
        {
            // create shortcuts for commonly accessed data
            var s = state;
            var t = clock.Current;

            if (clock.IsFirstTimestep)
            {

            }
            else
            {
                // Calculate SO2 concentrations
                s.acso2[t] = s.globso2[t];
            }
        }
コード例 #3
0
ファイル: BioDiversityComponent.cs プロジェクト: VWille/fund
        public void Run(Clock clock, IBioDiversityState state, IDimensions dimensions)
        {
            var s = state;
            var t = clock.Current;

            if (t > Timestep.FromYear(2000))
            {
                var dt = Math.Abs(s.temp[t] - s.temp[t - 1]);

                s.nospecies[t] = Math.Max(
                  s.nospecbase / 100,
                  s.nospecies[t - 1] * (1.0 - s.bioloss - s.biosens * dt * dt / s.dbsta / s.dbsta)
                  );
            }
            else
                s.nospecies[t] = s.nospecbase;
        }
コード例 #4
0
ファイル: OceanComponent.cs プロジェクト: fund-model/fund
        public void Run(Clock clock, IOceanState state, IDimensions dimensions)
        {
            var s = state;
            var t = clock.Current;

            if (clock.IsFirstTimestep)
            {
                // Delay in sea-level rise
                s.delaysea = 1.0 / s.lifesea;
                s.sea[t] = 0.0;
            }
            else
            {
                // Calculate sea level rise
                var ds = s.delaysea * s.seas * s.temp[t] - s.delaysea * s.sea[t - 1];

                s.sea[t] = s.sea[t - 1] + ds;
            }
        }
コード例 #5
0
ファイル: ImpactHeatingComponent.cs プロジェクト: VWille/fund
        public void Run(Clock clock, IImpactHeatingState state, IDimensions dimensions)
        {
            var s = state;
            var t = clock.Current;

            if (clock.IsFirstTimestep)
            {
            }
            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.heating[t, r] = s.hebm[r] * s.cumaeei[t, r] * s.gdp90[r] * Math.Atan(s.temp[t, r]) / Math.Atan(1.0) * Math.Pow(ypc / ypc90, s.heel) * s.population[t, r] / s.pop90[r];
                }
            }
        }
コード例 #6
0
        public void Run(Clock clock, IMarginalEmissionState state, IDimensions dimensions)
        {
            var t = clock.Current;
            var s = state;

            if (clock.IsFirstTimestep)
            {

            }
            else
            {
                if ((t.Value >= s.emissionperiod.Value) && (t.Value < (s.emissionperiod.Value + 10)))
                {
                    s.modemission[t] = s.emission[t] + 1;
                }
                else
                    s.modemission[t] = s.emission[t];
            }
        }
コード例 #7
0
        public void Run(Clock clock, IPopulationState state, IDimensions dimensions)
        {
            var s = state;
            var t = clock.Current;

            if (clock.IsFirstTimestep)
            {
                double globalpopulation = 0.0;

                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.population[t, r] = s.pop0[r];
                    s.populationin1[t, r] = s.population[t, r] * 1000000.0;

                    globalpopulation = globalpopulation + s.populationin1[t, r];
                }

                s.globalpopulation[t] = globalpopulation;
            }
            else
            {
                var globalPopulation = 0.0;
                // Calculate population
                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.population[t, r] = (1.0 + 0.01 * s.pgrowth[t - 1, r]) * (s.population[t - 1, r] +
                        (
                        (t >= Timestep.FromSimulationYear(40)) && !s.runwithoutpopulationperturbation ? (s.enter[t - 1, r] / 1000000.0) - (s.leave[t - 1, r] / 1000000.0) - (s.dead[t - 1, r] >= 0 ? s.dead[t - 1, r] / 1000000.0 : 0) : 0
                          )
                    );

                    if (s.population[t, r] < 0)
                        s.population[t, r] = 0.000001;
                    //raise new Exception;

                    s.populationin1[t, r] = s.population[t, r] * 1000000.0;
                    globalPopulation = globalPopulation + s.populationin1[t, r];
                }
                s.globalpopulation[t] = globalPopulation;

            }
        }
コード例 #8
0
        public void Run(Clock clock, IClimateRegionalState state, IDimensions dimensions)
        {
            var s = state;
            var t = clock.Current;

            foreach (var r in dimensions.GetValues<Region>())
            {
                s.regtmp[t, r] = s.inputtemp[t] * s.bregtmp[r] + s.scentemp[t, r];
            }

            foreach (var r in dimensions.GetValues<Region>())
            {
                s.temp[t, r] = s.regtmp[t, r] / s.bregtmp[r];
            }

            foreach (var r in dimensions.GetValues<Region>())
            {
                s.regstmp[t, r] = s.inputtemp[t] * s.bregstmp[r] + s.scentemp[t, r];
            }
        }
コード例 #9
0
ファイル: GeographyComponent.cs プロジェクト: VWille/fund
        public void Run(Clock clock, IGeographyState state, IDimensions dimensions)
        {
            var s = state;
            var t = clock.Current;

            if (clock.IsFirstTimestep)
            {
                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.area[t, r] = s.area0[r];
                }
            }
            else
            {
                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.area[t, r] = s.area[t - 1, r] - s.landloss[t - 1, r];
                }
            }
        }
コード例 #10
0
        public void Run(Clock clock, IClimateSF6CycleState state, IDimensions dimensions)
        {
            // create shortcuts for commonly accessed data
            var s = state;
            var t = clock.Current;

            if (clock.IsFirstTimestep)
            {
                s.sf6decay = 1.0 / s.lifesf6;

                s.acsf6[t] = s.sf6pre;
            }
            else
            {
                // Calculate SF6 concentrations
                s.acsf6[t] = s.sf6pre + (s.acsf6[t - 1] - s.sf6pre) * (1 - s.sf6decay) + s.globsf6[t] / 25.1;

                if (s.acsf6[t] < 0)
                    throw new ApplicationException("sf6 atmospheric concentration out of range");
            }
        }
コード例 #11
0
        public void Run(Clock clock, IClimateCH4CycleState state, IDimensions dimensions)
        {
            // create shortcuts for commonly accessed data
            var s = state;
            var t = clock.Current;

            if (clock.IsFirstTimestep)
            {
                s.ch4decay = 1.0 / s.lifech4;

                s.acch4[t] = 1222.0;
            }
            else
            {
                // Calculate CH4 concentrations
                s.acch4[t] = s.acch4[t - 1] + 0.3597 * s.globch4[t] - s.ch4decay * (s.acch4[t - 1] - s.ch4pre);

                if (s.acch4[t] < 0)
                    throw new ApplicationException("ch4 atmospheric concentration out of range");
            }
        }
コード例 #12
0
        public void Run(Clock clock, IClimateN2OCycleState state, IDimensions dimensions)
        {
            // create shortcuts for commonly accessed data
            var s = state;
            var t = clock.Current;

            if (clock.IsFirstTimestep)
            {
                s.n2odecay = 1.0 / s.lifen2o;

                s.acn2o[t] = 296;
            }
            else
            {
                // Calculate N2O concentrations
                s.acn2o[t] = s.acn2o[t - 1] + 0.2079 * s.globn2o[t] - s.n2odecay * (s.acn2o[t - 1] - s.n2opre);

                if (s.acn2o[t] < 0)
                    throw new ApplicationException("n2o atmospheric concentration out of range");
            }
        }
コード例 #13
0
        public void Run(Clock clock, IClimateDynamicsState state, IDimensions dimensions)
        {
            var s = state;
            var t = clock.Current;

            if (clock.IsFirstTimestep)
            {
                s.temp[t] = 0.20;
            }
            else
            {
                var LifeTemp = Math.Max(s.LifeTempConst + s.LifeTempLin * s.ClimateSensitivity + s.LifeTempQd * Math.Pow(s.ClimateSensitivity, 2.0), 1.0);

                var delaytemp = 1.0 / LifeTemp;

                var temps = s.ClimateSensitivity / 5.35 / Math.Log(2.0);

                // Calculate temperature
                var dtemp = delaytemp * temps * s.radforc[t] - delaytemp * s.temp[t - 1];

                s.temp[t] = s.temp[t - 1] + dtemp;
            }
        }
コード例 #14
0
        public void Run(Clock clock, IClimateCH4CycleState state, IDimensions dimensions)
        {
            // create shortcuts for commonly accessed data
            var s = state;
            var t = clock.Current;

            if (clock.IsFirstTimestep)
            {
                s.ch4decay = 1.0 / s.lifech4;

                s.acch4[t] = 1222.0;
            }
            else
            {
                // Calculate CH4 concentrations
                s.acch4[t] = s.acch4[t - 1] + 0.3597 * s.globch4[t] - s.ch4decay * (s.acch4[t - 1] - s.ch4pre);

                if (s.acch4[t] < 0)
                {
                    throw new ApplicationException("ch4 atmospheric concentration out of range");
                }
            }
        }
コード例 #15
0
ファイル: Inheritance.cs プロジェクト: wzchua/docs
        static void Main()
        {
            // Declare a class instance box1:
            Box box1 = new Box(30.0f, 20.0f);

            // Declare an interface instance dimensions:
            IDimensions dimensions = box1;

            // The following commented lines would produce compilation
            // errors because they try to access an explicitly implemented
            // interface member from a class instance:
            //<Snippet45>
            //System.Console.WriteLine("Length: {0}", box1.GetLength());
            //System.Console.WriteLine("Width: {0}", box1.GetWidth());
            //</Snippet45>

            // Print out the dimensions of the box by calling the methods
            // from an instance of the interface:
            //<Snippet46>
            System.Console.WriteLine("Length: {0}", dimensions.GetLength());
            System.Console.WriteLine("Width: {0}", dimensions.GetWidth());
            //</Snippet46>
        }
コード例 #16
0
        public void Run(Clock clock, IClimateN2OCycleState state, IDimensions dimensions)
        {
            // create shortcuts for commonly accessed data
            var s = state;
            var t = clock.Current;

            if (clock.IsFirstTimestep)
            {
                s.n2odecay = 1.0 / s.lifen2o;

                s.acn2o[t] = 296;
            }
            else
            {
                // Calculate N2O concentrations
                s.acn2o[t] = s.acn2o[t - 1] + 0.2079 * s.globn2o[t] - s.n2odecay * (s.acn2o[t - 1] - s.n2opre);

                if (s.acn2o[t] < 0)
                {
                    throw new ApplicationException("n2o atmospheric concentration out of range");
                }
            }
        }
コード例 #17
0
ファイル: WelfareComponent.cs プロジェクト: fund-model/fund
        public void Run(Clock clock, IGlobalWelfareState state, IDimensions dimensions)
        {
            var s = state;
            var t = clock.Current;

            if (clock.IsFirstTimestep)
            {
                s.cummulativewelfare[t] = 0;
            }
            else
            {
                if (t >= s.starttimestep)
                {

                    var U = Funcifier.Funcify(
                        (double consumption) =>
                        {
                            if (s.elasticityofmarginalutility == 1.0)
                                return s.utilitycalibrationadditive + s.utilitycalibrationmultiplicative * Math.Log(consumption);
                            else
                                return s.utilitycalibrationadditive + s.utilitycalibrationmultiplicative * Math.Pow(consumption, 1.0 - s.elasticityofmarginalutility) / (1.0 - s.elasticityofmarginalutility);
                        }
                        );

                    var DF = Funcifier.Funcify(
                        (Timestep year) =>
                        {
                            return Math.Pow(1.0 + s.prtp, -(year.Value - s.starttimestep.Value));
                        }
                        );

                    var perCapitaConsumption = s.consumption[t] / s.population[t];

                    if (perCapitaConsumption <= 0.0)
                        perCapitaConsumption = 1.0;

                    s.cummulativewelfare[t] = s.cummulativewelfare[t - 1] + (U(perCapitaConsumption) * s.population[t] * DF(t));
                    s.marginalwelfare[t] = DF(t) * s.utilitycalibrationmultiplicative / Math.Pow(perCapitaConsumption, s.elasticityofmarginalutility);

                    if (t == s.stoptimestep)
                    {
                        s.totalwelfare = s.cummulativewelfare[t];
                    }
                }
                else
                    s.cummulativewelfare[t] = 0;
            }
        }
コード例 #18
0
 public bool Equals(IDimensions other)
 {
     return(this == other);
 }
コード例 #19
0
 public ColumnVector(string name, IDimensions dims, uint num)
     : base(name, dims, num, 1)
 {
 }
コード例 #20
0
 public TemporalVariable(string name, IDimensions dims)
     : base(name, dims)
 {
 }
コード例 #21
0
ファイル: EmissionsComponent.cs プロジェクト: VWille/fund
        public void Run(Clock clock, IEmissionsState state, IDimensions dimensions)
        {
            var s = state;
            var t = clock.Current;

            if (clock.IsFirstTimestep)
            {
                // Initial values, should eventually also come from parameter file
                var t0 = Timestep.FromSimulationYear(0);

                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.energint[t0, r] = 1;
                    s.energuse[t0, r] = s.gdp0[r];
                    s.emissint[t0, r] = s.emissint0[r];
                    s.so2[t0, r] = s.so20[r];
                    s.emission[t0, r] = s.emissint[t0, r] / s.energuse[t0, r];
                    s.ch4cost[t0, r] = 0;
                    s.n2ocost[t0, r] = 0;
                    s.ryg[t0, r] = 0;
                    s.reei[t0, r] = 0;
                    s.rcei[t0, r] = 0;
                    s.seei[t0, r] = 0;
                    s.scei[t0, r] = 0;
                    s.co2red[t0, r] = 0;
                    s.know[t0, r] = 1;
                    s.ch4red[t0, r] = 0;
                    s.n2ored[t0, r] = 0;
                    s.mitigationcost[t0, r] = 0;
                }

                s.globknow[t0] = 1;
                s.cumglobco2[t0] = 0.0;
                s.cumglobch4[t0] = 0.0;
                s.cumglobn2o[t0] = 0.0;
                s.cumglobsf6[t0] = 0.0;
                s.cumglobso2[t0] = 0.0;

                //SocioEconomicState.minint[t0]=Double.PositiveInfinity;
                var minint = double.PositiveInfinity;
                foreach (var r in dimensions.GetValues<Region>())
                {
                    if (s.emission[t0, r] / s.income[t0, r] < minint)
                        minint = s.emission[t0, r] / s.income[t0, r];
                }
                //s.minint[t0] = minint;
                s.minint[t0] = 0;

            }
            else
            {

                // Calculate emission and carbon intensity
                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.energint[t, r] = (1.0 - 0.01 * s.aeei[t, r] - s.reei[t - 1, r]) * s.energint[t - 1, r];
                    s.emissint[t, r] = (1.0 - 0.01 * s.acei[t, r] - s.rcei[t - 1, r]) * s.emissint[t - 1, r];
                }

                // Calculate so2 emissions
                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.so2[t, r] = s.so2[t - 1, r] *
                                Math.Pow(1 + 0.01 * s.pgrowth[t - 1, r], s.so2pop) *
                                Math.Pow(1 + 0.01 * s.ypcgrowth[t - 1, r], s.so2inc) *
                                Math.Pow(1 - 0.01 * s.aeei[t, r] - s.reei[t - 1, r] - 0.01 * s.acei[t, r] - s.rcei[t - 1, r], s.so2carb);

                    s.so2WithSeeiAndScei[t, r] = s.so2[t, r] * (1 - s.seei[t - 1, r] - s.scei[t - 1, r]);
                }

                // Calculate sf6 emissions
                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.sf6[t, r] = (s.sf60[r] + s.sf6gdp * (s.income[t, r] - s.GDP90[r]) + s.sf6ypc * (s.income[t - 1, r] / s.population[t - 1, r] - s.GDP90[r] / s.pop90[r])) * (t <= Timestep.FromSimulationYear(60) ? 1 + (t.Value - 40.0) / 40.0 : 1.0 + (60.0 - 40.0) / 40.0) * (t > Timestep.FromSimulationYear(60) ? Math.Pow(0.99, t.Value - 60.0) : 1.0);
                }
                // Check for unrealistic values
                foreach (var r in dimensions.GetValues<Region>())
                {
                    if (s.sf6[t, r] < 0.0)
                        s.sf6[t, r] = 0;

                }
                // Calculate energy use
                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.energuse[t, r] = (1 - s.seei[t - 1, r]) * s.energint[t, r] * s.income[t, r];
                }

                // Calculate co2 emissions
                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.emission[t, r] = (1 - s.scei[t - 1, r]) * s.emissint[t, r] * s.energuse[t, r];
                    s.emissionwithforestry[t, r] = s.emission[t, r] + s.forestemm[t, r];
                }

                // Calculate ch4 emissions
                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.ch4[t, r] = s.ch4em[t, r] * (1 - s.ch4red[t - 1, r]);
                }

                // Calculate n2o emissions
                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.n2o[t, r] = s.n2oem[t, r] * (1 - s.n2ored[t - 1, r]);
                }

                // TODO RT check
                foreach (var r in dimensions.GetValues<Region>())
                {
                    if (s.emission[t, r] / s.income[t, r] - s.minint[t - 1] <= 0)
                        s.taxpar[t, r] = s.TaxConstant;
                    else
                        s.taxpar[t, r] = s.TaxConstant - s.TaxEmInt * Math.Sqrt(s.emission[t, r] / s.income[t, r] - s.minint[t - 1]);
                }

                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.co2red[t, r] = s.currtax[t, r] * s.emission[t, r] * s.know[t - 1, r] * s.globknow[t - 1] / 2 / s.taxpar[t, r] / s.income[t, r] / 1000;

                    if (s.co2red[t, r] < 0)
                        s.co2red[t, r] = 0;
                    else if (s.co2red[t, r] > 0.99)
                        s.co2red[t, r] = 0.99;
                }

                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.ryg[t, r] = s.taxpar[t, r] * Math.Pow(s.co2red[t, r], 2) / s.know[t - 1, r] / s.globknow[t - 1];
                }

                // TODO RT check
                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.perm[t, r] = 1.0 - 1.0 / s.TaxThreshold * s.currtax[t, r] / (1 + 1.0 / s.TaxThreshold * s.currtax[t, r]);
                }

                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.reei[t, r] = s.perm[t, r] * 0.5 * s.co2red[t, r];
                }

                // TODO RT check
                foreach (var r in dimensions.GetValues<Region>())
                {
                    if (s.currtax[t, r] < s.TaxThreshold)
                        s.rcei[t, r] = s.perm[t, r] * 0.5 * Math.Pow(s.co2red[t, r], 2);
                    else
                        s.rcei[t, r] = s.perm[t, r] * 0.5 * s.co2red[t, r];
                }

                // TODO RT check
                // TODO RT what is the 1.7?
                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.seei[t, r] = (1.0 - s.TaxDepreciation) * s.seei[t - 1, r] + (1.0 - s.perm[t, r]) * 0.5 * s.co2red[t, r] * 1.7;
                }

                foreach (var r in dimensions.GetValues<Region>())
                {
                    if (s.currtax[t, r] < 100)
                        s.scei[t, r] = 0.9 * s.scei[t - 1, r] + (1 - s.perm[t, r]) * 0.5 * Math.Pow(s.co2red[t, r], 2);
                    else
                        s.scei[t, r] = 0.9 * s.scei[t - 1, r] + (1 - s.perm[t, r]) * 0.5 * s.co2red[t, r] * 1.7;
                }

                // TODO RT check
                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.know[t, r] = s.know[t - 1, r] * Math.Sqrt(1 + s.knowpar * s.co2red[t, r]);

                    if (s.know[t, r] > Math.Sqrt(s.MaxCostFall))
                        s.know[t, r] = Math.Sqrt(s.MaxCostFall);
                }

                s.globknow[t] = s.globknow[t - 1];
                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.globknow[t] = s.globknow[t] * Math.Sqrt(1 + s.knowgpar * s.co2red[t, r]);
                }
                if (s.globknow[t] > 3.16)
                    s.globknow[t] = 3.16;

                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.ch4red[t, r] = s.currtaxch4[t, r] * s.ch4em[t, r] / 2 / s.ch4par1[r] / s.ch4par2[r] / s.ch4par2[r] / s.income[t, r] / 1000;

                    if (s.ch4red[t, r] < 0)
                        s.ch4red[t, r] = 0;
                    else if (s.ch4red[t, r] > 0.99)
                        s.ch4red[t, r] = 0.99;
                }

                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.n2ored[t, r] = s.gwpn2o * s.currtaxn2o[t, r] * s.n2oem[t, r] / 2 / s.n2opar1[r] / s.n2opar2[r] / s.n2opar2[r] / s.income[t, r] / 1000;

                    if (s.n2ored[t, r] < 0)
                        s.n2ored[t, r] = 0;
                    else if (s.n2ored[t, r] > 0.99)
                        s.n2ored[t, r] = 0.99;
                }

                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.ch4cost[t, r] = s.ch4par1[r] * Math.Pow(s.ch4par2[r], 2) * Math.Pow(s.ch4red[t, r], 2);
                    s.ch4costindollar[t, r] = s.ch4cost[t, r] * s.income[t, r];
                }

                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.n2ocost[t, r] = s.n2opar1[r] * Math.Pow(s.n2opar2[r], 2) * Math.Pow(s.n2ored[t, r], 2);
                }

                var minint = Double.PositiveInfinity;
                foreach (var r in dimensions.GetValues<Region>())
                {
                    if (s.emission[t, r] / s.income[t, r] < minint)
                        minint = s.emission[t, r] / s.income[t, r];
                }
                s.minint[t] = minint;

                foreach (var r in dimensions.GetValues<Region>())
                {
                    if (t > Timestep.FromYear(2000))
                        s.cumaeei[t, r] = s.cumaeei[t - 1, r] * (1.0 - 0.01 * s.aeei[t, r] - s.reei[t, r] + s.seei[t - 1, r] - s.seei[t, r]);
                    else
                        s.cumaeei[t, r] = 1.0;
                }

                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.mitigationcost[t, r] = (s.taxmp[r] * s.ryg[t, r] /*+ s.ch4cost[t, r]*/ + s.n2ocost[t, r]) * s.income[t, r];
                }

                double globco2 = 0;
                double globch4 = 0;
                double globn2o = 0;
                double globsf6 = 0;
                double globso2 = 34.4;

                foreach (var r in dimensions.GetValues<Region>())
                {
                    globco2 = globco2 + s.emissionwithforestry[t, r];
                    globch4 = globch4 + s.ch4[t, r];
                    globn2o = globn2o + s.n2o[t, r];
                    globsf6 = globsf6 + s.sf6[t, r];
                    globso2 = globso2 + s.so2WithSeeiAndScei[t, r];
                }

                s.mco2[t] = globco2;
                s.globch4[t] = Math.Max(0.0, globch4 + (t.Value > 50 ? s.ch4add * (t.Value - 50) : 0.0));
                s.globn2o[t] = Math.Max(0.0, globn2o + (t.Value > 50 ? s.n2oadd * (t.Value - 50) : 0));
                s.globsf6[t] = Math.Max(0.0, globsf6 + (t.Value > 50 ? s.sf6add * (t.Value - 50) : 0.0));
                s.globso2[t] = globso2;

                s.cumglobco2[t] = s.cumglobco2[t - 1] + s.mco2[t];
                s.cumglobch4[t] = s.cumglobch4[t - 1] + s.globch4[t];
                s.cumglobn2o[t] = s.cumglobn2o[t - 1] + s.globn2o[t];
                s.cumglobsf6[t] = s.cumglobsf6[t - 1] + s.globsf6[t];
                s.cumglobso2[t] = s.cumglobso2[t - 1] + s.globso2[t];
            }
        }
コード例 #22
0
 public BagController(IUsers users, IUserProfiles userProfiles, IReviews reviews, IDislikes dislikes, ILikes likes, IDeliveries deliveries, IProductOrders productOrders, ITypeOfProducts type, ISubCategories subCategories, IOrders orders, IDimensions dimensions, IProducts products, IProducers producers, IProductModels productModels, IProductImages productImages, IMaterials materials)
 {
     _products      = products;
     _producers     = producers;
     _productModels = productModels;
     _productImages = productImages;
     _materials     = materials;
     _dimensions    = dimensions;
     _orders        = orders;
     _type          = type;
     _subCategories = subCategories;
     _productOrders = productOrders;
     _deliveries    = deliveries;
     _dislikes      = dislikes;
     _likes         = likes;
     _reviews       = reviews;
     _userProfiles  = userProfiles;
     _users         = users;
 }
コード例 #23
0
        public void Run(Clock clock, IImpactBioDiversityState state, IDimensions dimensions)
        {
            var s = state;
            var t = clock.Current;

            if (clock.IsFirstTimestep)
            {

            }
            else
            {

                s.biodiv[t] = s.nospecbase / s.nospecies[t];

                foreach (var r in dimensions.GetValues<Region>())
                {
                    double ypc = 1000.0 * s.income[t, r] / s.population[t, r];

                    var dt = Math.Abs(s.temp[t, r] - s.temp[t - 1, r]);

                    var valadj = s.valbase / s.valinc[r] / (1 + s.valbase / s.valinc[r]);

                    s.species[t, r] = s.spbm /
                                    s.valbase * ypc / s.valinc[r] / (1.0 + ypc / s.valinc[r]) / valadj * ypc *
                                    s.population[t, r] / 1000.0 *
                                    dt / s.dbsta / (1.0 + dt / s.dbsta) *
                                    (1.0 - s.bioshare + s.bioshare * s.biodiv[t]);
                }
            }
        }
コード例 #24
0
        public void Run(Clock clock, IImpactSeaLevelRiseState state, IDimensions dimensions)
        {
            var s = state;
            var t = clock.Current;

            if (clock.IsFirstTimestep)
            {
                foreach (var r1 in dimensions.GetValues <Region>())
                {
                    foreach (var r2 in dimensions.GetValues <Region>())
                    {
                        double immsumm = 0;
                        foreach (var i in dimensions.GetValues <Region>())
                        {
                            immsumm += s.migrate[i, r1];
                        }
                        s.imigrate[r1, r2] = s.migrate[r2, r1] / immsumm;
                    }

                    var t0 = clock.StartTime;
                    s.landloss[t0, r1]       = 0.0;
                    s.cumlandloss[t0, r1]    = 0.0;
                    s.cumwetlandloss[t0, r1] = 0.0;
                    s.wetlandgrowth[t0, r1]  = 0.0;
                }
            }
            else
            {
                // slr in m/year
                double ds = s.sea[t] - s.sea[t - 1];

                foreach (var r in dimensions.GetValues <Region>())
                {
                    double ypc       = s.income[t, r] / s.population[t, r] * 1000.0;
                    double ypcprev   = s.income[t - 1, r] / s.population[t - 1, r] * 1000.0;
                    double ypcgrowth = ypc / ypcprev - 1.0;

                    if (t == Timestep.FromYear(1951))
                    {
                        ypcgrowth = 0;
                    }

                    // Needs to be in $bn per km^2
                    // Income is in billion, area is in km^2
                    double incomedens = s.income[t, r] / s.area[t, r];

                    double incomedensprev = s.income[t - 1, r] / s.area[t - 1, r];

                    double incomedensgrowth = incomedens / incomedensprev - 1.0;

                    // In population/km^2
                    // population is in million, area is in km^2
                    double popdens       = s.population[t, r] / s.area[t, r] * 1000000.0;
                    double popdensprev   = s.population[t - 1, r] / s.area[t - 1, r] * 1000000.0;
                    double popdensgrowth = popdens / popdensprev - 1.0;

                    // Unit of dryval is $bn/km^2
                    s.dryval[t, r] = s.dvbm * Math.Pow(incomedens / s.incdens, s.dvydl);

                    // Unit of wetval is $bn/km^2
                    s.wetval[t, r] = s.wvbm *
                                     Math.Pow(ypc / s.slrwvypc0, s.wvel) *
                                     Math.Pow(popdens / s.slrwvpopdens0, s.wvpdl) *
                                     Math.Pow((s.wetland90[r] - s.cumwetlandloss[t - 1, r]) / s.wetland90[r], s.wvsl);

                    double potCumLandloss = Math.Min(s.maxlandloss[r], s.dlbm[r] * Math.Pow(s.sea[t], s.drylandlossparam[r]));

                    double potLandloss = potCumLandloss - s.cumlandloss[t - 1, r];

                    // If sea levels fall, no protection is build
                    if (ds < 0)
                    {
                        s.npprotcost[t, r] = 0;
                        s.npwetcost[t, r]  = 0;
                        s.npdrycost[t, r]  = 0;
                        s.protlev[t, r]    = 0;
                    }
                    // If the discount rate < -100% people will not build protection
                    else if ((1.0 + s.slrprtp[r] + ypcgrowth) < 0.0)
                    {
                        s.npprotcost[t, r] = 0;
                        s.npwetcost[t, r]  = 0;
                        s.npdrycost[t, r]  = 0;
                        s.protlev[t, r]    = 0;
                    }
                    // Dryland value is worthless
                    else if (((1.0 + s.dvydl * incomedensgrowth) < 0.0))
                    {
                        s.npprotcost[t, r] = 0;
                        s.npwetcost[t, r]  = 0;
                        s.npdrycost[t, r]  = 0;
                        s.protlev[t, r]    = 0;
                    }
                    // Is protecting the coast infinitly expensive?
                    else if ((1.0 / (1.0 + s.slrprtp[r] + ypcgrowth)) >= 1)
                    {
                        s.npprotcost[t, r] = 0;
                        s.npwetcost[t, r]  = 0;
                        s.npdrycost[t, r]  = 0;
                        s.protlev[t, r]    = 0;
                    }
                    // Is dryland infinitly valuable?
                    else if (((1.0 + s.dvydl * incomedensgrowth) / (1.0 + s.slrprtp[r] + ypcgrowth)) >= 1.0)
                    {
                        s.npprotcost[t, r] = 0;
                        s.npwetcost[t, r]  = 0;
                        s.npdrycost[t, r]  = 0;
                        s.protlev[t, r]    = 1;
                    }
                    // Is wetland infinitly valuable?
                    else if (((1.0 + s.wvel * ypcgrowth + s.wvpdl * popdensgrowth + s.wvsl * s.wetlandgrowth[t - 1, r]) / (1.0 + s.slrprtp[r] + ypcgrowth)) >= 1.0)
                    {
                        s.npprotcost[t, r] = 0;
                        s.npwetcost[t, r]  = 0;
                        s.npdrycost[t, r]  = 0;
                        s.protlev[t, r]    = 0;
                    }
                    else
                    {
                        // NPV of protecting the whole coast
                        // pc is in $bn/m
                        s.npprotcost[t, r] = s.pc[r] * ds * (1.0 + s.slrprtp[r] + ypcgrowth) / (s.slrprtp[r] + ypcgrowth);

                        // NPV of wetland
                        if ((1.0 + s.wvel * ypcgrowth + s.wvpdl * popdensgrowth + s.wvsl * s.wetlandgrowth[t - 1, r]) < 0.0)
                        {
                            s.npwetcost[t, r] = 0;
                        }
                        else
                        {
                            s.npwetcost[t, r] = s.wmbm[r] * ds * s.wetval[t, r] * (1.0 + s.slrprtp[r] + ypcgrowth) / (s.slrprtp[r] + ypcgrowth - s.wvel * ypcgrowth - s.wvpdl * popdensgrowth - s.wvsl * s.wetlandgrowth[t - 1, r]);
                        }

                        // NPV of dryland
                        if ((1.0 + s.dvydl * incomedensgrowth) < 0.0)
                        {
                            s.npdrycost[t, r] = 0;
                        }
                        else
                        {
                            s.npdrycost[t, r] = potLandloss * s.dryval[t, r] * (1 + s.slrprtp[r] + ypcgrowth) / (s.slrprtp[r] + ypcgrowth - s.dvydl * incomedensgrowth);
                        }

                        // Calculate protection level
                        s.protlev[t, r] = Math.Max(0.0, 1.0 - 0.5 * (s.npprotcost[t, r] + s.npwetcost[t, r]) / s.npdrycost[t, r]);

                        if (s.protlev[t, r] > 1)
                        {
                            throw new Exception("protlevel >1 should not happen");
                        }
                    }

                    // Calculate actual wetland loss and cost
                    s.wetlandloss[t, r] = Math.Min(
                        s.wlbm[r] * ds + s.protlev[t, r] * s.wmbm[r] * ds,
                        s.wetmax[r] - s.cumwetlandloss[t - 1, r]);

                    s.cumwetlandloss[t, r] = s.cumwetlandloss[t - 1, r] + s.wetlandloss[t, r];

                    // Calculate wetland growth
                    s.wetlandgrowth[t, r] = (s.wetland90[r] - s.cumwetlandloss[t, r]) / (s.wetland90[r] - s.cumwetlandloss[t - 1, r]) - 1.0;

                    s.wetcost[t, r] = s.wetval[t, r] * s.wetlandloss[t, r];

                    s.landloss[t, r] = (1.0 - s.protlev[t, r]) * potLandloss;

                    s.cumlandloss[t, r] = s.cumlandloss[t - 1, r] + s.landloss[t, r];
                    s.drycost[t, r]     = s.dryval[t, r] * s.landloss[t, r];

                    s.protcost[t, r] = s.protlev[t, r] * s.pc[r] * ds;

                    if (s.landloss[t, r] < 0)
                    {
                        s.leave[t, r] = 0;
                    }
                    else
                    {
                        s.leave[t, r] = s.coastpd[r] * popdens * s.landloss[t, r];
                    }

                    s.leavecost[t, r] = s.emcst * ypc * s.leave[t, r] / 1000000000;
                }

                foreach (var destination in dimensions.GetValues <Region>())
                {
                    double enter = 0.0;
                    foreach (var source in dimensions.GetValues <Region>())
                    {
                        enter += s.leave[t, source] * s.imigrate[source, destination];
                    }
                    s.enter[t, destination] = enter;
                }

                foreach (var r in dimensions.GetValues <Region>())
                {
                    double ypc = s.income[t, r] / s.population[t, r] * 1000.0;
                    s.entercost[t, r] = s.immcst * ypc * s.enter[t, r] / 1000000000;
                }
            }
        }
コード例 #25
0
ファイル: DataMatrix.cs プロジェクト: jrising/Open-World-v1
 public DataMatrix(string name, IDimensions dims, double[,] values)
     : base(name, dims, (uint)values.GetLength(0), (uint)values.GetLength(1))
 {
     this.values = values;
 }
コード例 #26
0
ファイル: Constant.cs プロジェクト: jrising/Open-World-v1
 public Constant(string name, double constant, IDimensions dims)
     : base(name, dims)
 {
     this.constant = constant;
 }
コード例 #27
0
        public void Run(Clock clock, IRegionalHotellingTaxationState state, IDimensions dimensions)
        {
            var t = clock.Current;
            var s = state;

            foreach (var r in dimensions.GetValues<Region>())
            {
                var perCapitaConsumptionNow = s.consumption[t, r] / s.population[t, r];
                var perCapitaConsumptionPrevious = s.consumption[t - 1, r] / s.population[t - 1, r];

                var perCapitaGrowthRate = perCapitaConsumptionNow / perCapitaConsumptionPrevious - 1.0;

                var discountrate = perCapitaGrowthRate * s.elasticityofmarginalutility + s.prtp;

                if (t < s.baseyear)
                    s.currtax[t, r] = 0.0;
                else if (t == s.baseyear)
                    s.currtax[t, r] = s.basetax[r];
                else
                    s.currtax[t, r] = s.currtax[t - 1, r] * (1.0 + discountrate);

                s.currtaxn2o[t, r] = s.currtax[t, r];
                s.currtaxch4[t, r] = s.currtax[t, r];

            }
        }
コード例 #28
0
 public GraphVariable(string name, GraphEvaluate evaluate, IDimensions dims, params TemporalVariable[] args)
     : base(name, dims)
 {
     this.evaluate = evaluate;
     this.args     = args;
 }
コード例 #29
0
 public Function(string name, Evaluator function, IDimensions dims, params TemporalVariable[] args)
     : base(name, dims)
 {
     this.function = function;
     this.args     = args;
 }
コード例 #30
0
ファイル: Measurement.cs プロジェクト: jrising/Open-World-v1
 public Measurement(double value, double confidence, IDimensions dimensions)
 {
     this.value      = value;
     this.confidence = confidence;
     this.dimensions = dimensions;
 }
コード例 #31
0
        public void Run(Clock clock, IClimateForcingState state, IDimensions dimensions)
        {
            var s = state;
            var t = clock.Current;

            if (clock.IsFirstTimestep)
            {

            }
            else
            {
                double ch4n2o = Interact(s.ch4pre, s.n2opre);

                s.rfCO2[t] = 5.35 * Math.Log(s.acco2[t] / s.co2pre);

                s.rfCH4[t] = 0.036 * (Math.Sqrt(s.acch4[t]) - Math.Sqrt(s.ch4pre)) - Interact(s.acch4[t], s.n2opre) + ch4n2o;

                s.rfN2O[t] = 0.12 * (Math.Sqrt(s.acn2o[t]) - Math.Sqrt(s.n2opre)) - Interact(s.ch4pre, s.acn2o[t]) + ch4n2o;

                s.rfSF6[t] = 0.00052 * (s.acsf6[t] - s.sf6pre);

                s.rfSO2[t] = s.so2dir * s.acso2[t] / 14.6 + s.so2ind * Math.Log(1.0 + s.acso2[t] / 34.4) / Math.Log(1 + 14.6 / 34.4) - 0.9;

                s.radforc[t] = s.rfCO2[t] + s.rfCH4[t] + s.rfN2O[t] + s.rfSF6[t] - s.rfSO2[t];

                s.rfEMF22[t] = s.rfCO2[t] + s.rfCH4[t] + s.rfN2O[t];
            }
        }
コード例 #32
0
 public NodeVariable(string name, Stack <Node> graphstack, NodeEvaluate evaluate, IDimensions dims)
     : base(name, dims)
 {
     this.graphstack = graphstack;
     this.evaluate   = evaluate;
 }
コード例 #33
0
        public void Run(Clock clock, IImpactExtratropicalStormsState state, IDimensions dimensions)
        {
            var t = clock.Current;
            var s = state;

            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.extratropicalstormsdam[t, r] = s.extratropicalstormsbasedam[r] * s.income[t, r] * Math.Pow(ypc / ypc90, s.extratropicalstormsdamel) * (Math.Pow(1.0 + (s.extratropicalstormspar[r] * (s.acco2[t] / s.co2pre)), s.extratropicalstormsnl) - 1.0);
                s.extratropicalstormsdead[t, r] = 1000.0 * s.extratropicalstormsbasedead[r] * s.population[t, r] * Math.Pow(ypc / ypc90, s.extratropicalstormsdeadel) * (Math.Pow(1.0 + (s.extratropicalstormspar[r] * (s.acco2[t] / s.co2pre)), s.extratropicalstormsnl) - 1.0);
            }
        }
コード例 #34
0
 public WindowArgs SetDimensions(IDimensions <int> dimensions)
 {
     (this.dimensions_.Width, this.dimensions_.Height) = (dimensions.Width,
                                                          dimensions.Height);
     return(this);
 }
コード例 #35
0
        public void Run(Clock clock, IImpactAggregationState state, IDimensions dimensions)
        {
            var s = state;
            var t = clock.Current;

            if (clock.IsFirstTimestep)
            {
                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.eloss[t, r] = 0.0;
                    s.sloss[t, r] = 0.0;
                }
            }
            else
            {
                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.eloss[t, r] = Math.Min(
                        0.0
                        - (s.switchoffwater ? 0.0 : s.water[t, r])
                        - (s.switchoffforests ? 0.0 : s.forests[t, r])
                        - (s.switchoffheating ? 0.0 : s.heating[t, r])
                        - (s.switchoffcooling ? 0.0 : s.cooling[t, r])
                        - (s.switchoffagcost ? 0.0 : s.agcost[t, r])
                        + (s.switchoffdrycost ? 0.0 : s.drycost[t, r])
                        + (s.switchoffprotcost ? 0.0 : s.protcost[t, r])
                        + (s.switchoffentercost ? 0.0 : s.entercost[t, r])
                        + (s.switchoffhurrdam ? 0.0 : s.hurrdam[t, r])
                        + (s.switchoffextratropicalstormsdam ? 0.0 : s.extratropicalstormsdam[t, r]),
                        s.income[t, r]);
                }

                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.sloss[t, r] = 0.0
                        + (s.switchoffspecies ? 0.0 : s.species[t, r])
                        + (s.switchoffdeadcost ? 0.0 : s.deadcost[t, r])
                        + (s.switchoffmorbcost ? 0.0 : s.morbcost[t, r])
                        + (s.switchoffwetcost ? 0.0 : s.wetcost[t, r])
                        + (s.switchoffleavecost ? 0.0 : s.leavecost[t, r]);
                }

                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.loss[t, r] = (s.eloss[t, r] + s.sloss[t, r]) * 1000000000.0;
                }
            }
        }
コード例 #36
0
        public void Run(Clock clock, IImpactDiarrhoeaState state, IDimensions dimensions)
        {
            var s = state;
            var t = clock.Current;

            foreach (var r in dimensions.GetValues<Region>())
            {
                var ypc = 1000.0 * s.income[t, r] / s.population[t, r];
                var ypc90 = 1000.0 * s.gdp90[r] / s.pop90[r];

                // 0.49 is the increase in global temperature from pre-industrial to 1990
                var absoluteRegionalTempPreIndustrial = s.temp90[r] - 0.49 * s.bregtmp[r];

                if (absoluteRegionalTempPreIndustrial > 0.0)
                {
                    s.diadead[t, r] = s.diamort[r] * s.population[t, r] * Math.Pow(ypc / ypc90, s.diamortel)
                        * (Math.Pow((absoluteRegionalTempPreIndustrial + s.regtmp[t, r]) / absoluteRegionalTempPreIndustrial, s.diamortnl) - 1.0);

                    s.diasick[t, r] = s.diayld[r] * s.population[t, r] * Math.Pow(ypc / ypc90, s.diayldel)
                        * (Math.Pow((absoluteRegionalTempPreIndustrial + s.regtmp[t, r]) / absoluteRegionalTempPreIndustrial, s.diayldnl) - 1.0);
                }
                else
                {
                    s.diadead[t, r] = 0.0;
                    s.diasick[t, r] = 0.0;
                }
            }
        }
コード例 #37
0
ファイル: Variable.cs プロジェクト: jrising/Open-World-v1
 public Variable(string name, IDimensions dims)
 {
     this.name = name;
     this.dims = dims;
 }
コード例 #38
0
 public IDimensions Times(IDimensions other)
 {
     return(other);
 }
コード例 #39
0
        public void Run(Clock clock, IImpactCardiovascularRespiratoryState state, IDimensions dimensions)
        {
            var s = state;
            var t = clock.Current;

            if (clock.IsFirstTimestep)
            {
            }
            else
            {
                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.basecardvasc[t, r] = s.cardvasc90[r] + s.cvlin * (s.plus[t, r] - s.plus90[r]);
                    if (s.basecardvasc[t, r] > 1.0)
                    {
                        s.basecardvasc[t, r] = 1.0;
                    }

                    s.baseresp[t, r] = s.resp90[r] + s.rlin * (s.plus[t, r] - s.plus90[r]);
                    if (s.baseresp[t, r] > 1.0)
                    {
                        s.baseresp[t, r] = 1.0;
                    }

                    s.cardheat[t, r] = (s.chplbm[r] * s.plus[t, r] + s.chmlbm[r] * (1.0 - s.plus[t, r])) * s.temp[t, r] +
                                       (s.chpqbm[r] * s.plus[t, r] + s.chmqbm[r] * (1.0 - s.plus[t, r])) * Math.Pow(s.temp[t, r], 2);
                    s.cardheat[t, r] = s.cardheat[t, r] * s.urbpop[t, r] * s.population[t, r] * 10;
                    if (s.cardheat[t, r] > 1000.0 * s.maxcardvasc * s.basecardvasc[t, r] * s.urbpop[t, r] * s.population[t, r])
                    {
                        s.cardheat[t, r] = 1000 * s.maxcardvasc * s.basecardvasc[t, r] * s.urbpop[t, r] * s.population[t, r];
                    }
                    if (s.cardheat[t, r] < 0.0)
                    {
                        s.cardheat[t, r] = 0;
                    }

                    s.resp[t, r] = s.rlbm[r] * s.temp[t, r] + s.rqbm[r] * Math.Pow(s.temp[t, r], 2);
                    s.resp[t, r] = s.resp[t, r] * s.urbpop[t, r] * s.population[t, r] * 10;
                    if (s.resp[t, r] > 1000 * s.maxcardvasc * s.baseresp[t, r] * s.urbpop[t, r] * s.population[t, r])
                    {
                        s.resp[t, r] = 1000 * s.maxcardvasc * s.baseresp[t, r] * s.urbpop[t, r] * s.population[t, r];
                    }
                    if (s.resp[t, r] < 0)
                    {
                        s.resp[t, r] = 0;
                    }

                    s.cardcold[t, r] = (s.ccplbm[r] * s.plus[t, r] + s.ccmlbm[r] * (1.0 - s.plus[t, r])) * s.temp[t, r] +
                                       (s.ccpqbm[r] * s.plus[t, r] + s.ccmqbm[r] * (1.0 - s.plus[t, r])) * Math.Pow(s.temp[t, r], 2);
                    s.cardcold[t, r] = s.cardcold[t, r] * s.population[t, r] * 10;
                    if (s.cardcold[t, r] < -1000 * s.maxcardvasc * s.basecardvasc[t, r] * s.population[t, r])
                    {
                        s.cardcold[t, r] = -1000 * s.maxcardvasc * s.basecardvasc[t, r] * s.population[t, r];
                    }
                    if (s.cardcold[t, r] > 0)
                    {
                        s.cardcold[t, r] = 0;
                    }
                }
            }
        }
コード例 #40
0
        public void Run(Clock clock, IEmissionsState state, IDimensions dimensions)
        {
            var s = state;
            var t = clock.Current;

            if (clock.IsFirstTimestep)
            {
                // Initial values, should eventually also come from parameter file
                var t0 = Timestep.FromSimulationYear(0);

                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.energint[t0, r]       = 1;
                    s.energuse[t0, r]       = s.gdp0[r];
                    s.emissint[t0, r]       = s.emissint0[r];
                    s.so2[t0, r]            = s.so20[r];
                    s.emission[t0, r]       = s.emissint[t0, r] / s.energuse[t0, r];
                    s.ch4cost[t0, r]        = 0;
                    s.n2ocost[t0, r]        = 0;
                    s.ryg[t0, r]            = 0;
                    s.reei[t0, r]           = 0;
                    s.rcei[t0, r]           = 0;
                    s.seei[t0, r]           = 0;
                    s.scei[t0, r]           = 0;
                    s.co2red[t0, r]         = 0;
                    s.know[t0, r]           = 1;
                    s.ch4red[t0, r]         = 0;
                    s.n2ored[t0, r]         = 0;
                    s.mitigationcost[t0, r] = 0;
                }

                s.globknow[t0]   = 1;
                s.cumglobco2[t0] = 0.0;
                s.cumglobch4[t0] = 0.0;
                s.cumglobn2o[t0] = 0.0;
                s.cumglobsf6[t0] = 0.0;
                s.cumglobso2[t0] = 0.0;

                //SocioEconomicState.minint[t0]=Double.PositiveInfinity;
                var minint = double.PositiveInfinity;
                foreach (var r in dimensions.GetValues <Region>())
                {
                    if (s.emission[t0, r] / s.income[t0, r] < minint)
                    {
                        minint = s.emission[t0, r] / s.income[t0, r];
                    }
                }
                //s.minint[t0] = minint;
                s.minint[t0] = 0;
            }
            else
            {
                // Calculate emission and carbon intensity
                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.energint[t, r] = (1.0 - 0.01 * s.aeei[t, r] - s.reei[t - 1, r]) * s.energint[t - 1, r];
                    s.emissint[t, r] = (1.0 - 0.01 * s.acei[t, r] - s.rcei[t - 1, r]) * s.emissint[t - 1, r];
                }

                // Calculate so2 emissions
                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.so2[t, r] = s.so2[t - 1, r] *
                                  Math.Pow(1 + 0.01 * s.pgrowth[t - 1, r], s.so2pop) *
                                  Math.Pow(1 + 0.01 * s.ypcgrowth[t - 1, r], s.so2inc) *
                                  Math.Pow(1 - 0.01 * s.aeei[t, r] - s.reei[t - 1, r] - 0.01 * s.acei[t, r] - s.rcei[t - 1, r], s.so2carb);

                    s.so2WithSeeiAndScei[t, r] = s.so2[t, r] * (1 - s.seei[t - 1, r] - s.scei[t - 1, r]);
                }

                // Calculate sf6 emissions
                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.sf6[t, r] = (s.sf60[r] + s.sf6gdp * (s.income[t, r] - s.GDP90[r]) + s.sf6ypc * (s.income[t - 1, r] / s.population[t - 1, r] - s.GDP90[r] / s.pop90[r])) * (t <= Timestep.FromSimulationYear(60) ? 1 + (t.Value - 40.0) / 40.0 : 1.0 + (60.0 - 40.0) / 40.0) * (t > Timestep.FromSimulationYear(60) ? Math.Pow(0.99, t.Value - 60.0) : 1.0);
                }
                // Check for unrealistic values
                foreach (var r in dimensions.GetValues <Region>())
                {
                    if (s.sf6[t, r] < 0.0)
                    {
                        s.sf6[t, r] = 0;
                    }
                }
                // Calculate energy use
                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.energuse[t, r] = (1 - s.seei[t - 1, r]) * s.energint[t, r] * s.income[t, r];
                }

                // Calculate co2 emissions
                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.emission[t, r]             = (1 - s.scei[t - 1, r]) * s.emissint[t, r] * s.energuse[t, r];
                    s.emissionwithforestry[t, r] = s.emission[t, r] + s.forestemm[t, r];
                }

                // Calculate ch4 emissions
                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.ch4[t, r] = s.ch4em[t, r] * (1 - s.ch4red[t - 1, r]);
                }

                // Calculate n2o emissions
                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.n2o[t, r] = s.n2oem[t, r] * (1 - s.n2ored[t - 1, r]);
                }


                // TODO RT check
                foreach (var r in dimensions.GetValues <Region>())
                {
                    if (s.emission[t, r] / s.income[t, r] - s.minint[t - 1] <= 0)
                    {
                        s.taxpar[t, r] = s.TaxConstant;
                    }
                    else
                    {
                        s.taxpar[t, r] = s.TaxConstant - s.TaxEmInt * Math.Sqrt(s.emission[t, r] / s.income[t, r] - s.minint[t - 1]);
                    }
                }

                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.co2red[t, r] = s.currtax[t, r] * s.emission[t, r] * s.know[t - 1, r] * s.globknow[t - 1] / 2 / s.taxpar[t, r] / s.income[t, r] / 1000;

                    if (s.co2red[t, r] < 0)
                    {
                        s.co2red[t, r] = 0;
                    }
                    else if (s.co2red[t, r] > 0.99)
                    {
                        s.co2red[t, r] = 0.99;
                    }
                }

                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.ryg[t, r] = s.taxpar[t, r] * Math.Pow(s.co2red[t, r], 2) / s.know[t - 1, r] / s.globknow[t - 1];
                }

                // TODO RT check
                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.perm[t, r] = 1.0 - 1.0 / s.TaxThreshold * s.currtax[t, r] / (1 + 1.0 / s.TaxThreshold * s.currtax[t, r]);
                }

                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.reei[t, r] = s.perm[t, r] * 0.5 * s.co2red[t, r];
                }

                // TODO RT check
                foreach (var r in dimensions.GetValues <Region>())
                {
                    if (s.currtax[t, r] < s.TaxThreshold)
                    {
                        s.rcei[t, r] = s.perm[t, r] * 0.5 * Math.Pow(s.co2red[t, r], 2);
                    }
                    else
                    {
                        s.rcei[t, r] = s.perm[t, r] * 0.5 * s.co2red[t, r];
                    }
                }

                // TODO RT check
                // TODO RT what is the 1.7?
                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.seei[t, r] = (1.0 - s.TaxDepreciation) * s.seei[t - 1, r] + (1.0 - s.perm[t, r]) * 0.5 * s.co2red[t, r] * 1.7;
                }

                foreach (var r in dimensions.GetValues <Region>())
                {
                    if (s.currtax[t, r] < 100)
                    {
                        s.scei[t, r] = 0.9 * s.scei[t - 1, r] + (1 - s.perm[t, r]) * 0.5 * Math.Pow(s.co2red[t, r], 2);
                    }
                    else
                    {
                        s.scei[t, r] = 0.9 * s.scei[t - 1, r] + (1 - s.perm[t, r]) * 0.5 * s.co2red[t, r] * 1.7;
                    }
                }

                // TODO RT check
                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.know[t, r] = s.know[t - 1, r] * Math.Sqrt(1 + s.knowpar * s.co2red[t, r]);

                    if (s.know[t, r] > Math.Sqrt(s.MaxCostFall))
                    {
                        s.know[t, r] = Math.Sqrt(s.MaxCostFall);
                    }
                }

                s.globknow[t] = s.globknow[t - 1];
                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.globknow[t] = s.globknow[t] * Math.Sqrt(1 + s.knowgpar * s.co2red[t, r]);
                }
                if (s.globknow[t] > 3.16)
                {
                    s.globknow[t] = 3.16;
                }

                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.ch4red[t, r] = s.currtaxch4[t, r] * s.ch4em[t, r] / 2 / s.ch4par1[r] / s.ch4par2[r] / s.ch4par2[r] / s.income[t, r] / 1000;

                    if (s.ch4red[t, r] < 0)
                    {
                        s.ch4red[t, r] = 0;
                    }
                    else if (s.ch4red[t, r] > 0.99)
                    {
                        s.ch4red[t, r] = 0.99;
                    }
                }

                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.n2ored[t, r] = s.gwpn2o * s.currtaxn2o[t, r] * s.n2oem[t, r] / 2 / s.n2opar1[r] / s.n2opar2[r] / s.n2opar2[r] / s.income[t, r] / 1000;

                    if (s.n2ored[t, r] < 0)
                    {
                        s.n2ored[t, r] = 0;
                    }
                    else if (s.n2ored[t, r] > 0.99)
                    {
                        s.n2ored[t, r] = 0.99;
                    }
                }

                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.ch4cost[t, r]         = s.ch4par1[r] * Math.Pow(s.ch4par2[r], 2) * Math.Pow(s.ch4red[t, r], 2);
                    s.ch4costindollar[t, r] = s.ch4cost[t, r] * s.income[t, r];
                }

                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.n2ocost[t, r] = s.n2opar1[r] * Math.Pow(s.n2opar2[r], 2) * Math.Pow(s.n2ored[t, r], 2);
                }

                var minint = Double.PositiveInfinity;
                foreach (var r in dimensions.GetValues <Region>())
                {
                    if (s.emission[t, r] / s.income[t, r] < minint)
                    {
                        minint = s.emission[t, r] / s.income[t, r];
                    }
                }
                s.minint[t] = minint;

                foreach (var r in dimensions.GetValues <Region>())
                {
                    if (t > Timestep.FromYear(2000))
                    {
                        s.cumaeei[t, r] = s.cumaeei[t - 1, r] * (1.0 - 0.01 * s.aeei[t, r] - s.reei[t, r] + s.seei[t - 1, r] - s.seei[t, r]);
                    }
                    else
                    {
                        s.cumaeei[t, r] = 1.0;
                    }
                }

                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.mitigationcost[t, r] = (s.taxmp[r] * s.ryg[t, r] /*+ s.ch4cost[t, r]*/ + s.n2ocost[t, r]) * s.income[t, r];
                }

                double globco2 = 0;
                double globch4 = 0;
                double globn2o = 0;
                double globsf6 = 0;
                double globso2 = 34.4;

                foreach (var r in dimensions.GetValues <Region>())
                {
                    globco2 = globco2 + s.emissionwithforestry[t, r];
                    globch4 = globch4 + s.ch4[t, r];
                    globn2o = globn2o + s.n2o[t, r];
                    globsf6 = globsf6 + s.sf6[t, r];
                    globso2 = globso2 + s.so2WithSeeiAndScei[t, r];
                }

                s.mco2[t]    = globco2;
                s.globch4[t] = Math.Max(0.0, globch4 + (t.Value > 50 ? s.ch4add * (t.Value - 50) : 0.0));
                s.globn2o[t] = Math.Max(0.0, globn2o + (t.Value > 50 ? s.n2oadd * (t.Value - 50) : 0));
                s.globsf6[t] = Math.Max(0.0, globsf6 + (t.Value > 50 ? s.sf6add * (t.Value - 50) : 0.0));
                s.globso2[t] = globso2;

                s.cumglobco2[t] = s.cumglobco2[t - 1] + s.mco2[t];
                s.cumglobch4[t] = s.cumglobch4[t - 1] + s.globch4[t];
                s.cumglobn2o[t] = s.cumglobn2o[t - 1] + s.globn2o[t];
                s.cumglobsf6[t] = s.cumglobsf6[t - 1] + s.globsf6[t];
                s.cumglobso2[t] = s.cumglobso2[t - 1] + s.globso2[t];
            }
        }
コード例 #41
0
 public RandomVariable(string name, double min, double max, IDimensions dims)
     : base(name, dims)
 {
     this.min = min;
     this.max = max;
 }
コード例 #42
0
        public void Run(Clock clock, IImpactDeathMorbidityState state, IDimensions dimensions)
        {
            var s = state;
            var t = clock.Current;

            if (clock.IsFirstTimestep)
            {

            }
            else
            {
                foreach (var r in dimensions.GetValues<Region>())
                {
                    double ypc = s.income[t, r] / s.population[t, r] * 1000.0;

                    s.dead[t, r] = s.dengue[t, r] + s.schisto[t, r] + s.malaria[t, r] + s.cardheat[t, r] + s.cardcold[t, r] + s.resp[t, r] + s.diadead[t, r] + s.hurrdead[t, r] + s.extratropicalstormsdead[t, r];
                    if (s.dead[t, r] > s.population[t, r] * 1000000.0)
                        s.dead[t, r] = s.population[t, r] / 1000000.0;

                    s.yll[t, r] = s.d2ld[r] * s.dengue[t, r] + s.d2ls[r] * s.schisto[t, r] + s.d2lm[r] * s.malaria[t, r] + s.d2lc[r] * s.cardheat[t, r] + s.d2lc[r] * s.cardcold[t, r] + s.d2lr[r] * s.resp[t, r];

                    s.yld[t, r] = s.d2dd[r] * s.dengue[t, r] + s.d2ds[r] * s.schisto[t, r] + s.d2dm[r] * s.malaria[t, r] + s.d2dc[r] * s.cardheat[t, r] + s.d2dc[r] * s.cardcold[t, r] + s.d2dr[r] * s.resp[t, r] + s.diasick[t, r];

                    s.vsl[t, r] = s.vslbm * Math.Pow(ypc / s.vslypc0, s.vslel);
                    s.deadcost[t, r] = s.vsl[t, r] * s.dead[t, r] / 1000000000.0;
                    // deadcost:= vyll*ypc*yll/1000000000;

                    s.vmorb[t, r] = s.vmorbbm * Math.Pow(ypc / s.vmorbypc0, s.vmorbel);
                    s.morbcost[t, r] = s.vmorb[t, r] * s.yld[t, r] / 1000000000.0;

                }
            }
        }
コード例 #43
0
        public void Run(Clock clock, IScenarioUncertaintyState state, IDimensions dimensions)
        {
            var s = state;
            var t = clock.Current;

            Double yearsFromUncertaintyStart = t.Value - s.timeofuncertaintystart.Value;
            var sdTimeFactor = (yearsFromUncertaintyStart / 50.0) / (1.0 + (yearsFromUncertaintyStart / 50.0));

            foreach (var r in dimensions.GetValues<Region>())
            {

                s.ypcgrowth[t, r] = s.scenypcgrowth[t, r] + (t >= s.timeofuncertaintystart ? s.ecgradd[r] * sdTimeFactor : 0.0);
                s.pgrowth[t, r] = s.scenpgrowth[t, r] + (t >= s.timeofuncertaintystart ? s.pgadd[r] * sdTimeFactor : 0.0);
                s.aeei[t, r] = s.scenaeei[t, r] + (t >= s.timeofuncertaintystart ? s.aeeiadd[r] * sdTimeFactor : 0.0);
                s.acei[t, r] = s.scenacei[t, r] + (t >= s.timeofuncertaintystart ? s.aceiadd[r] * sdTimeFactor : 0.0);
                s.forestemm[t, r] = s.scenforestemm[t, r] + (t >= s.timeofuncertaintystart ? s.foremadd[r] * sdTimeFactor : 0.0);
            }
        }
コード例 #44
0
ファイル: Matrix.cs プロジェクト: jrising/Open-World-v1
 public Matrix(string name, IDimensions dims, uint rows, uint cols)
     : base(name, dims)
 {
     this.rows = rows;
     this.cols = cols;
 }
コード例 #45
0
 public IDimensions DividedBy(IDimensions other)
 {
     return(other.RaisedTo(-1));
 }
コード例 #46
0
        public void Run(Clock clock, IRegionalWelfareState state, IDimensions dimensions)
        {
            var s = state;
            var t = clock.Current;

            if (clock.IsFirstTimestep)
            {
                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.cummulativewelfare[t, r] = 0;
                }
            }
            else
            {
                if (t >= s.starttimestep)
                {
                    var U = Funcifier.Funcify(
                        (double consumption) =>
                    {
                        if (s.elasticityofmarginalutility == 1.0)
                        {
                            return(s.utilitycalibrationadditive + s.utilitycalibrationmultiplicative * Math.Log(consumption));
                        }
                        else
                        {
                            return(s.utilitycalibrationadditive + s.utilitycalibrationmultiplicative * Math.Pow(consumption, 1.0 - s.elasticityofmarginalutility) / (1.0 - s.elasticityofmarginalutility));
                        }
                    }
                        );

                    var DF = Funcifier.Funcify(
                        (Timestep year) =>
                    {
                        return(Math.Pow(1.0 + s.prtp, -(year.Value - s.starttimestep.Value)));
                    }
                        );

                    foreach (var r in dimensions.GetValues <Region>())
                    {
                        var w = s.cummulativewelfare[t - 1, r];

                        var perCapitaConsumption = s.consumption[t, r] / s.population[t, r];

                        // This is a lower bound
                        if (perCapitaConsumption <= 0.0)
                        {
                            perCapitaConsumption = 1.0;
                        }

                        w = w + (U(perCapitaConsumption) * s.population[t, r] * DF(t));
                        s.marginalwelfare[t, r] = DF(t) * s.utilitycalibrationmultiplicative / Math.Pow(perCapitaConsumption, s.elasticityofmarginalutility);

                        s.cummulativewelfare[t, r] = w;

                        if (t == s.stoptimestep)
                        {
                            s.totalwelfare[r] = s.cummulativewelfare[t, r];
                        }
                    }
                }
                else
                {
                    foreach (var r in dimensions.GetValues <Region>())
                    {
                        s.cummulativewelfare[t, r] = 0;
                    }
                }
            }
        }
コード例 #47
0
 public MemoizedVariable(string name, IDimensions dims)
     : base(name, dims)
 {
     value = double.NaN;
 }
コード例 #48
0
 public void Aggregate(IDimensions source)
 {
     MinPoint = Vector3.ComponentMin(MinPoint, source.MinPoint);
     MaxPoint = Vector3.ComponentMax(MaxPoint, source.MaxPoint);
 }
コード例 #49
0
ファイル: WelfareComponent.cs プロジェクト: fund-model/fund
        public void Run(Clock clock, IUtilitarianWelfareState state, IDimensions dimensions)
        {
            var s = state;
            var t = clock.Current;

            if (clock.IsFirstTimestep)
            {
                s.cummulativewelfare[t] = 0;
            }
            else
            {
                if (t >= s.starttimestep)
                {
                    var w = s.cummulativewelfare[t - 1];

                    var U = Funcifier.Funcify(
                        (double consumption) =>
                        {
                            if (s.elasticityofmarginalutility == 1.0)
                                return s.utilitycalibrationadditive + s.utilitycalibrationmultiplicative * Math.Log(consumption);
                            else
                                return s.utilitycalibrationadditive + s.utilitycalibrationmultiplicative * Math.Pow(consumption, 1.0 - s.elasticityofmarginalutility) / (1.0 - s.elasticityofmarginalutility);

                        }
                        );

                    var DF = Funcifier.Funcify(
                        (Timestep year) =>
                        {
                            return Math.Pow(1.0 + s.prtp, -(year.Value - s.starttimestep.Value));
                        }
                      );

                    foreach (var r in dimensions.GetValues<Region>())
                    {
                        var perCapitaConsumption = s.consumption[t, r] / s.population[t, r];

                        // This is a lower bound
                        if (perCapitaConsumption <= 0.0)
                            perCapitaConsumption = 1.0;

                        w = w + (s.welfareweight[t, r] * U(perCapitaConsumption) * s.population[t, r] * DF(t));
                        s.marginalwelfare[t, r] = DF(t) * s.welfareweight[t, r] * s.utilitycalibrationmultiplicative / Math.Pow(perCapitaConsumption, s.elasticityofmarginalutility);
                    }
                    s.cummulativewelfare[t] = w;

                    if (t == s.stoptimestep)
                        s.totalwelfare = s.cummulativewelfare[t];
                }
                else
                    s.cummulativewelfare[t] = 0;
            }
        }
コード例 #50
0
ファイル: ClimateCO2Cycle.cs プロジェクト: fund-model/fund
        public void Run(Clock clock, IClimateCO2CycleState state, IDimensions dimensions)
        {
            var s = state;
            var t = clock.Current;

            if (clock.IsFirstTimestep)
            {
                s.co2decay1 = s.lifeco1;
                s.co2decay2 = Math.Exp(-1.0 / s.lifeco2);
                s.co2decay3 = Math.Exp(-1.0 / s.lifeco3);
                s.co2decay4 = Math.Exp(-1.0 / s.lifeco4);
                s.co2decay5 = Math.Exp(-1.0 / s.lifeco5);

                s.TerrCO2Stock[t] = s.TerrCO2Stock0;

                s.cbox1[t] = s.cbox10;
                s.cbox2[t] = s.cbox20;
                s.cbox3[t] = s.cbox30;
                s.cbox4[t] = s.cbox40;
                s.cbox5[t] = s.cbox50;
                s.acco2[t] = s.cbox1[t] + s.cbox2[t] + s.cbox3[t] + s.cbox4[t] + s.cbox5[t];
            }
            else
            {
                if (t == Timestep.FromYear(2011))
                {
                    s.tempIn2010 = s.temp[Timestep.FromYear(2010)];
                }

                if (t > Timestep.FromYear(2010))
                {

                    s.TerrestrialCO2[t] = (s.temp[t - 1] - s.tempIn2010) * s.TerrCO2Sens * s.TerrCO2Stock[t - 1] / s.TerrCO2Stock0;
                }
                else
                    s.TerrestrialCO2[t] = 0;

                s.TerrCO2Stock[t] = Math.Max(s.TerrCO2Stock[t - 1] - s.TerrestrialCO2[t], 0.0);

                s.globc[t] = s.mco2[t] + s.TerrestrialCO2[t];

                // Calculate CO2 concentrations
                s.cbox1[t] = s.cbox1[t - 1] * s.co2decay1 + 0.000471 * s.co2frac1 * (s.globc[t]);
                s.cbox2[t] = s.cbox2[t - 1] * s.co2decay2 + 0.000471 * s.co2frac2 * (s.globc[t]);
                s.cbox3[t] = s.cbox3[t - 1] * s.co2decay3 + 0.000471 * s.co2frac3 * (s.globc[t]);
                s.cbox4[t] = s.cbox4[t - 1] * s.co2decay4 + 0.000471 * s.co2frac4 * (s.globc[t]);
                s.cbox5[t] = s.cbox5[t - 1] * s.co2decay5 + 0.000471 * s.co2frac5 * (s.globc[t]);

                s.acco2[t] = s.cbox1[t] + s.cbox2[t] + s.cbox3[t] + s.cbox4[t] + s.cbox5[t];
            }
        }
コード例 #51
0
ファイル: ImpactForests.cs プロジェクト: fund-model/fund
        public void Run(Clock clock, IImpactForestsState state, IDimensions dimensions)
        {
            var s = state;
            var t = clock.Current;

            if (clock.IsFirstTimestep)
            {

            }
            else
            {
                foreach (var r in dimensions.GetValues<Region>())
                {
                    double ypc = 1000.0 * s.income[t, r] / s.population[t, r];
                    double ypc90 = s.gdp90[r] / s.pop90[r] * 1000.0;

                    // TODO -oDavid Anthoff: RT uses -lP.forel for ppp case
                    s.forests[t, r] = s.forbm[r] * s.income[t, r] * Math.Pow(ypc / ypc90, s.forel) * (0.5 * Math.Pow(s.temp[t, r], s.fornl) + 0.5 * Math.Log(s.acco2[t - 1] / s.co2pre) * s.forco2);

                    if (s.forests[t, r] > 0.1 * s.income[t, r])
                        s.forests[t, r] = 0.1 * s.income[t, r];
                }
            }
        }
コード例 #52
0
 public PackingService(IDimensions dimensions, List <Item> itemsToPack)
 {
     Pack(new Container(int.MinValue, dimensions.Length, dimensions.Width, dimensions.Height), itemsToPack);
 }
コード例 #53
0
ファイル: Stock.cs プロジェクト: jrising/Open-World-v1
 public Stock(string name, double initial, IDimensions dims)
     : base(name, dims)
 {
     this.level = initial;
 }
コード例 #54
0
        public void Run(Clock clock, IImpactSeaLevelRiseState state, IDimensions dimensions)
        {
            var s = state;
            var t = clock.Current;

            if (clock.IsFirstTimestep)
            {
                foreach (var r1 in dimensions.GetValues<Region>())
                {
                    foreach (var r2 in dimensions.GetValues<Region>())
                    {
                        double immsumm = 0;
                        foreach (var i in dimensions.GetValues<Region>())
                        {
                            immsumm += s.migrate[i, r1];
                        }
                        s.imigrate[r1, r2] = s.migrate[r2, r1] / immsumm;
                    }

                    var t0 = clock.StartTime;
                    s.landloss[t0, r1] = 0.0;
                    s.cumlandloss[t0, r1] = 0.0;
                    s.cumwetlandloss[t0, r1] = 0.0;
                    s.wetlandgrowth[t0, r1] = 0.0;
                }
            }
            else
            {
                // slr in m/year
                double ds = s.sea[t] - s.sea[t - 1];

                foreach (var r in dimensions.GetValues<Region>())
                {
                    double ypc = s.income[t, r] / s.population[t, r] * 1000.0;
                    double ypcprev = s.income[t - 1, r] / s.population[t - 1, r] * 1000.0;
                    double ypcgrowth = ypc / ypcprev - 1.0;

                    if (t == Timestep.FromYear(1951))
                        ypcgrowth = 0;

                    // Needs to be in $bn per km^2
                    // Income is in billion, area is in km^2
                    double incomedens = s.income[t, r] / s.area[t, r];

                    double incomedensprev = s.income[t - 1, r] / s.area[t - 1, r];

                    double incomedensgrowth = incomedens / incomedensprev - 1.0;

                    // In population/km^2
                    // population is in million, area is in km^2
                    double popdens = s.population[t, r] / s.area[t, r] * 1000000.0;
                    double popdensprev = s.population[t - 1, r] / s.area[t - 1, r] * 1000000.0;
                    double popdensgrowth = popdens / popdensprev - 1.0;

                    // Unit of dryval is $bn/km^2
                    s.dryval[t, r] = s.dvbm * Math.Pow(incomedens / s.incdens, s.dvydl);

                    // Unit of wetval is $bn/km^2
                    s.wetval[t, r] = s.wvbm *
                        Math.Pow(ypc / s.slrwvypc0, s.wvel) *
                        Math.Pow(popdens / s.slrwvpopdens0, s.wvpdl) *
                        Math.Pow((s.wetland90[r] - s.cumwetlandloss[t - 1, r]) / s.wetland90[r], s.wvsl);

                    double potCumLandloss = Math.Min(s.maxlandloss[r], s.cumlandloss[t - 1, r] + s.dlbm[r] * Math.Pow(s.sea[t], s.drylandlossparam[r]));

                    double potLandloss = potCumLandloss - s.cumlandloss[t - 1, r];

                    // If sea levels fall, no protection is build
                    if (ds < 0)
                    {
                        s.npprotcost[t, r] = 0;
                        s.npwetcost[t, r] = 0;
                        s.npdrycost[t, r] = 0;
                        s.protlev[t, r] = 0;
                    }
                    // If the discount rate < -100% people will not build protection
                    else if ((1.0 + s.slrprtp[r] + ypcgrowth) < 0.0)
                    {
                        s.npprotcost[t, r] = 0;
                        s.npwetcost[t, r] = 0;
                        s.npdrycost[t, r] = 0;
                        s.protlev[t, r] = 0;
                    }
                    // Dryland value is worthless
                    else if (((1.0 + s.dvydl * incomedensgrowth) < 0.0))
                    {
                        s.npprotcost[t, r] = 0;
                        s.npwetcost[t, r] = 0;
                        s.npdrycost[t, r] = 0;
                        s.protlev[t, r] = 0;
                    }
                    // Is protecting the coast infinitly expensive?
                    else if ((1.0 / (1.0 + s.slrprtp[r] + ypcgrowth)) >= 1)
                    {
                        s.npprotcost[t, r] = 0;
                        s.npwetcost[t, r] = 0;
                        s.npdrycost[t, r] = 0;
                        s.protlev[t, r] = 0;
                    }
                    // Is dryland infinitly valuable?
                    else if (((1.0 + s.dvydl * incomedensgrowth) / (1.0 + s.slrprtp[r] + ypcgrowth)) >= 1.0)
                    {
                        s.npprotcost[t, r] = 0;
                        s.npwetcost[t, r] = 0;
                        s.npdrycost[t, r] = 0;
                        s.protlev[t, r] = 1;
                    }
                    // Is wetland infinitly valuable?
                    else if (((1.0 + s.wvel * ypcgrowth + s.wvpdl * popdensgrowth + s.wvsl * s.wetlandgrowth[t - 1, r]) / (1.0 + s.slrprtp[r] + ypcgrowth)) >= 1.0)
                    {
                        s.npprotcost[t, r] = 0;
                        s.npwetcost[t, r] = 0;
                        s.npdrycost[t, r] = 0;
                        s.protlev[t, r] = 0;
                    }
                    else
                    {
                        // NPV of protecting the whole coast
                        // pc is in $bn/m
                        s.npprotcost[t, r] = s.pc[r] * ds * (1.0 + s.slrprtp[r] + ypcgrowth) / (s.slrprtp[r] + ypcgrowth);

                        // NPV of wetland
                        if ((1.0 + s.wvel * ypcgrowth + s.wvpdl * popdensgrowth + s.wvsl * s.wetlandgrowth[t - 1, r]) < 0.0)
                            s.npwetcost[t, r] = 0;
                        else
                            s.npwetcost[t, r] = s.wmbm[r] * ds * s.wetval[t, r] * (1.0 + s.slrprtp[r] + ypcgrowth) / (s.slrprtp[r] + ypcgrowth - s.wvel * ypcgrowth - s.wvpdl * popdensgrowth - s.wvsl * s.wetlandgrowth[t - 1, r]);

                        // NPV of dryland
                        if ((1.0 + s.dvydl * incomedensgrowth) < 0.0)
                            s.npdrycost[t, r] = 0;
                        else
                            s.npdrycost[t, r] = potLandloss * s.dryval[t, r] * (1 + s.slrprtp[r] + ypcgrowth) / (s.slrprtp[r] + ypcgrowth - s.dvydl * incomedensgrowth);

                        // Calculate protection level
                        s.protlev[t, r] = Math.Max(0.0, 1.0 - 0.5 * (s.npprotcost[t, r] + s.npwetcost[t, r]) / s.npdrycost[t, r]);

                        if (s.protlev[t, r] > 1)
                            throw new Exception("protlevel >1 should not happen");
                    }

                    // Calculate actual wetland loss and cost
                    s.wetlandloss[t, r] = Math.Min(
                        s.wlbm[r] * ds + s.protlev[t, r] * s.wmbm[r] * ds,
                        s.wetmax[r] - s.cumwetlandloss[t - 1, r]);

                    s.cumwetlandloss[t, r] = s.cumwetlandloss[t - 1, r] + s.wetlandloss[t, r];

                    // Calculate wetland growth
                    s.wetlandgrowth[t, r] = (s.wetland90[r] - s.cumwetlandloss[t, r]) / (s.wetland90[r] - s.cumwetlandloss[t - 1, r]) - 1.0;

                    s.wetcost[t, r] = s.wetval[t, r] * s.wetlandloss[t, r];

                    s.landloss[t, r] = (1.0 - s.protlev[t, r]) * potLandloss;

                    s.cumlandloss[t, r] = s.cumlandloss[t - 1, r] + s.landloss[t, r];
                    s.drycost[t, r] = s.dryval[t, r] * s.landloss[t, r];

                    s.protcost[t, r] = s.protlev[t, r] * s.pc[r] * ds;

                    if (s.landloss[t, r] < 0)
                        s.leave[t, r] = 0;
                    else
                        s.leave[t, r] = s.coastpd[r] * popdens * s.landloss[t, r];

                    s.leavecost[t, r] = s.emcst * ypc * s.leave[t, r] / 1000000000;
                }

                foreach (var destination in dimensions.GetValues<Region>())
                {
                    double enter = 0.0;
                    foreach (var source in dimensions.GetValues<Region>())
                    {
                        enter += s.leave[t, source] * s.imigrate[source, destination];
                    }
                    s.enter[t, destination] = enter;
                }

                foreach (var r in dimensions.GetValues<Region>())
                {
                    double ypc = s.income[t, r] / s.population[t, r] * 1000.0;
                    s.entercost[t, r] = s.immcst * ypc * s.enter[t, r] / 1000000000;
                }
            }
        }
コード例 #55
0
        public void Run(Clock clock, ISocioEconomicState state, IDimensions dimensions)
        {
            var s = state;
            var t = clock.Current;

            double savingsrate = 0.2;

            if (clock.IsFirstTimestep)
            {
                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.income[t, r]      = s.gdp0[r];
                    s.ypc[t, r]         = s.income[t, r] / s.population[t, r] * 1000.0;
                    s.consumption[t, r] = s.income[t, r] * 1000000000.0 * (1.0 - savingsrate);
                }

                s.globalconsumption[t] = dimensions.GetValues <Region>().Select(r => s.consumption[t, r]).Sum();

                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.ypc90[r] = s.gdp90[r] / s.pop90[r] * 1000;
                }
            }
            else
            {
                // Calculate income growth rate
                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.ygrowth[t, r] = (1 + 0.01 * s.pgrowth[t - 1, r]) * (1 + 0.01 * s.ypcgrowth[t - 1, r]) - 1;
                }

                // Calculate income
                foreach (var r in dimensions.GetValues <Region>())
                {
                    double oldincome = s.income[t - 1, r] - ((t >= Timestep.FromSimulationYear(40)) && !s.runwithoutdamage ? s.consleak * s.eloss[t - 1, r] / 10.0 : 0);

                    s.income[t, r] = (1 + s.ygrowth[t, r]) * oldincome - s.mitigationcost[t - 1, r];
                }

                // Check for unrealistic values
                foreach (var r in dimensions.GetValues <Region>())
                {
                    if (s.income[t, r] < 0.01 * s.population[t, r])
                    {
                        s.income[t, r] = 0.1 * s.population[t, r];
                    }
                }

                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.ypc[t, r] = s.income[t, r] / s.population[t, r] * 1000.0;
                }

                var totalConsumption = 0.0;
                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.consumption[t, r] = Math.Max(
                        s.income[t, r] * 1000000000.0 * (1.0 - savingsrate) - (s.runwithoutdamage ? 0.0 : (s.eloss[t - 1, r] + s.sloss[t - 1, r]) * 1000000000.0),
                        0.0);

                    totalConsumption = totalConsumption + s.consumption[t, r];
                }
                s.globalconsumption[t] = totalConsumption;

                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.plus[t, r] = s.plus90[r] * Math.Pow(s.ypc[t, r] / s.ypc90[r], s.plusel);

                    if (s.plus[t, r] > 1)
                    {
                        s.plus[t, r] = 1.0;
                    }
                }

                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.popdens[t, r] = s.population[t, r] / s.area[t, r] * 1000000.0;
                }

                foreach (var r in dimensions.GetValues <Region>())
                {
                    s.urbpop[t, r] = (0.031 * Math.Sqrt(s.ypc[t, r]) - 0.011 * Math.Sqrt(s.popdens[t, r])) / (1.0 + 0.031 * Math.Sqrt(s.ypc[t, r]) - 0.011 * Math.Sqrt(s.popdens[t, r]))
                                     / (1 + s.urbcorr[r] / (1 + 0.001 * Math.Pow(Convert.ToDouble(t.Value) - 40.0, 2))); // (* DA: urbcorr needs to be changed to a function if this is to be made uncertain *)
                }

                s.globalincome[t] = dimensions.GetValues <Region>().Select(r => s.income[t, r]).Sum();

                s.globalypc[t] = dimensions.GetValues <Region>().Select(r => s.income[t, r] * 1000000000.0).Sum() /
                                 dimensions.GetValues <Region>().Select(r => s.populationin1[t, r]).Sum();
            }
        }
コード例 #56
0
ファイル: SocioEconomicComponent.cs プロジェクト: VWille/fund
        public void Run(Clock clock, ISocioEconomicState state, IDimensions dimensions)
        {
            var s = state;
            var t = clock.Current;

            double savingsrate = 0.2;

            if (clock.IsFirstTimestep)
            {
                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.income[t, r] = s.gdp0[r];
                    s.population[t, r] = s.pop0[r];
                    s.populationin1[t, r] = s.population[t, r] * 1000000.0;
                    s.ypc[t, r] = s.income[t, r] / s.population[t, r] * 1000.0;
                    s.consumption[t, r] = s.income[t, r] * 1000000000.0 * (1.0 - savingsrate);
                }

                s.globalpopulation[t] = dimensions.GetValues<Region>().Select(r => s.populationin1[t, r]).Sum();
                s.globalconsumption[t] = dimensions.GetValues<Region>().Select(r => s.consumption[t, r]).Sum();

                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.ypc90[r] = s.gdp90[r] / s.pop90[r] * 1000;
                }
            }
            else
            {
                var totalPopulation = 0.0;
                // Calculate population
                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.population[t, r] = (1 + 0.01 * s.pgrowth[t - 1, r]) * (s.population[t - 1, r] +
                        (
                        (t >= Timestep.FromSimulationYear(40)) && !s.runwithoutpopulationperturbation ? (s.enter[t - 1, r] / 1000000.0) - (s.leave[t - 1, r] / 1000000.0) - (s.dead[t - 1, r] >= 0 ? s.dead[t - 1, r] / 1000000.0 : 0) : 0
                          )
                    );

                    if (s.population[t, r] < 0)
                        s.population[t, r] = 0.000001;
                    //raise new Exception;

                    s.populationin1[t, r] = s.population[t, r] * 1000000.0;
                    totalPopulation = totalPopulation + s.populationin1[t, r];
                }
                s.globalpopulation[t] = totalPopulation;

                // Calculate income growth rate
                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.ygrowth[t, r] = (1 + 0.01 * s.pgrowth[t - 1, r]) * (1 + 0.01 * s.ypcgrowth[t - 1, r]) - 1;
                }

                // Calculate income
                foreach (var r in dimensions.GetValues<Region>())
                {
                    double oldincome = s.income[t - 1, r] - ((t >= Timestep.FromSimulationYear(40)) && !s.runwithoutdamage ? s.consleak * s.eloss[t - 1, r] / 10.0 : 0);

                    s.income[t, r] = (1 + s.ygrowth[t, r]) * oldincome - s.mitigationcost[t - 1, r];
                }

                // Check for unrealistic values
                foreach (var r in dimensions.GetValues<Region>())
                {
                    if (s.income[t, r] < 0.01 * s.population[t, r])
                        s.income[t, r] = 0.1 * s.population[t, r];

                }

                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.ypc[t, r] = s.income[t, r] / s.population[t, r] * 1000.0;
                }

                var totalConsumption = 0.0;
                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.consumption[t, r] = Math.Max(
                        s.income[t, r] * 1000000000.0 * (1.0 - savingsrate) - (s.runwithoutdamage ? 0.0 : (s.eloss[t - 1, r] + s.sloss[t - 1, r]) * 1000000000.0),
                      0.0);

                    totalConsumption = totalConsumption + s.consumption[t, r];
                }
                s.globalconsumption[t] = totalConsumption;

                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.plus[t, r] = s.plus90[r] * Math.Pow(s.ypc[t, r] / s.ypc90[r], s.plusel);

                    if (s.plus[t, r] > 1)
                        s.plus[t, r] = 1.0;
                }

                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.popdens[t, r] = s.population[t, r] / s.area[t, r] * 1000000.0;
                }

                foreach (var r in dimensions.GetValues<Region>())
                {
                    s.urbpop[t, r] = (0.031 * Math.Sqrt(s.ypc[t, r]) - 0.011 * Math.Sqrt(s.popdens[t, r])) / (1.0 + 0.031 * Math.Sqrt(s.ypc[t, r]) - 0.011 * Math.Sqrt(s.popdens[t, r]))
                        / (1 + s.urbcorr[r] / (1 + 0.001 * Math.Pow(Convert.ToDouble(t.Value) - 40.0, 2))); // (* DA: urbcorr needs to be changed to a function if this is to be made uncertain *)

                }

                s.globalincome[t] = dimensions.GetValues<Region>().Select(r => s.income[t, r]).Sum();

                s.globalypc[t] = dimensions.GetValues<Region>().Select(r => s.income[t, r] * 1000000000.0).Sum() /
                    dimensions.GetValues<Region>().Select(r => s.populationin1[t, r]).Sum();
            }
        }
コード例 #57
0
        static void Main(string[] args)
        {
            SampleClass sc   = new SampleClass();
            IControl    ctrl = (IControl)sc;
            ISurface    srfc = (ISurface)sc;

            // The following lines all call the same method.
            sc.Paint();
            ctrl.Paint();
            srfc.Paint();

            SampleClass2 obj = new SampleClass2();
            //obj.Paint();  // Compiler error.

            IControl c = (IControl)obj;

            c.Paint();  // Calls IControl.Paint on SampleClass.

            ISurface s = (ISurface)obj;

            s.Paint(); // Calls ISurface.Paint on SampleClass.


            //=======================================================

            // Declare a class instance box1:
            Box box1 = new Box(30.0f, 20.0f);

            // Declare an instance of the English units interface:
            IEnglishDimensions eDimensions = (IEnglishDimensions)box1;

            // Declare an instance of the metric units interface:
            IMetricDimensions mDimensions = (IMetricDimensions)box1;

            // Print dimensions in English units:
            System.Console.WriteLine("Length(in): {0}", eDimensions.Length());
            System.Console.WriteLine("Width (in): {0}", eDimensions.Width());

            // Print dimensions in metric units:
            System.Console.WriteLine("Length(cm): {0}", mDimensions.Length());
            System.Console.WriteLine("Width (cm): {0}", mDimensions.Width());

            //=======================================================

            Box2 box2 = new Box2(30.0f, 20.0f);
            IMetricDimensions mDimensions2 = (IMetricDimensions)box2;

            System.Console.WriteLine("Length(in): {0}", box2.Length());
            System.Console.WriteLine("Width (in): {0}", box2.Width());
            System.Console.WriteLine("Length(cm): {0}", mDimensions2.Length());
            System.Console.WriteLine("Width (cm): {0}", mDimensions2.Width());

            //=======================================================

            // Declare a class instance box1:
            Box3 box3 = new Box3(30.0f, 20.0f);

            // Declare an interface instance dimensions:
            IDimensions dimensions = (IDimensions)box3;

            // The following commented lines would produce compilation
            // errors because they try to access an explicitly implemented
            // interface member from a class instance:
            //System.Console.WriteLine("Length: {0}", box1.getLength());
            //System.Console.WriteLine("Width: {0}", box1.getWidth());

            // Print out the dimensions of the box by calling the methods
            // from an instance of the interface:
            System.Console.WriteLine("Length: {0}", dimensions.getLength());
            System.Console.WriteLine("Width: {0}", dimensions.getWidth());
        }
コード例 #58
0
ファイル: Report.ascx.cs プロジェクト: jaytem/minGit
    private List<AnalyticsReportData> GetAnalyticsReport(string provider)
    {
        bool allowSorting = false;
        string cssTweak = string.Empty;
        if (FromWidget)
        {
            cssTweak = "<style type='text/css'> .EktronPersonalization .analyticsReport .SiteSelectorContainer {display: none;} </style>";
        }
        else
        {
            cssTweak = "<style type='text/css'> .SiteSelectorContainer {display: none;} </style>";
        }
        if (!String.IsNullOrEmpty(provider) && _dataManager.HasProvider(provider))
        {
            allowSorting = _dataManager.AllowSorting(provider);
            _dimensions = _dataManager.GetDimensions(provider);
            _metrics = _dataManager.GetMetrics(provider);
            string providerType = _dataManager.GetProviderType(provider);
            if (providerType != "Ektron.Cms.Analytics.Providers.GoogleAnalyticsProvider")
            {
                if (FromWidget)
                {
                    cssTweak = "<style type='text/css'> .EktronPersonalization .analyticsReport input.SegmentPopupBtn {display: none;} </style>";
                }
                else
                {
                    cssTweak = "<style type='text/css'> input.SegmentPopupBtn {display: none;} </style>";
                }
            }
        }
        gvDataTable.AllowSorting = allowSorting;

        List<AnalyticsReportData> reports = null;
        AnalyticsReportData report = null;
        DateTime startDate = _startDate;
        DateTime endDate = _endDate;
        string reportSubtitle = string.Empty;
        string reportSummary = string.Empty;
        string reportSummaryShort = string.Empty;
        string reportSegSummary = string.Empty;
        bool bGeneric = false;

        if (ErrorPanel.Visible) {
            this.htmReportSummary.InnerText = string.Empty;
            return null;
        }

        AnalyticsCriteria criteria = new AnalyticsCriteria();
        // setting criteria.PagingInfo.RecordsPerPage will disable the paging in the grid.
        //criteria.PagingInfo.RecordsPerPage = gvDataTable.PageSize;
        if (DisplayView.Detail == this.View)
        {
            criteria.AggregationPeriod = AggregationTimePeriod.ByDay;
        }

        try
        {
            _defaultView = DisplayView.Percentage;
            _bDrillDownReport = false;
            _bDrillDownDetail = true;
            switch (_reportType)
            {
                #region Google Analytics Reports
                /* case ReportType.MapOverlay: */
                case ReportType.Locations:
                    ReportTitle = _reportTypeName = GetMessage("sam locations");
                    if (IsDimensionSupported(_dimensions.country))
                    {
                        reportSummary = GetMessage("lbl visit came from countries");
                        reportSegSummary = GetMessage("lbl visit came from countries in segment");
                        _columnName = GetMessage("lbl country territory");
                        _defaultView = DisplayView.Table;
                        _bDrillDownReport = true;
                        _bDrillDownDetail = false;
                        if (!String.IsNullOrEmpty(_forValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.country, DimensionFilterOperator.EqualTo, _forValue);
                            criteria.Dimensions.Insert(0, _dimensions.region);
                            reportSummary = GetMessage("lbl visit came from regions");
                            reportSegSummary = GetMessage("lbl visit came from regions in segment");
                            ReportTitle = _columnName;
                            if (_forValue != "(not set)") // TODO: "(not set)" is Google-specific
                            {
                                reportSubtitle = _forValue;
                            }
                            _columnName = GetMessage("lbl region");
                            _strDrillDownArg = "and";
                        }
                        if (!String.IsNullOrEmpty(_andValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.region, DimensionFilterOperator.EqualTo, _andValue);
                            criteria.Dimensions.Insert(0, _dimensions.city);
                            reportSummary = GetMessage("lbl visit came from cities");
                            reportSegSummary = GetMessage("lbl visit came from cities in segment");
                            ReportTitle = _columnName;
                            if (_andValue != "(not set)") // TODO: "(not set)" is Google-specific
                            {
                                if (reportSubtitle.Length > 0)
                                {
                                    reportSubtitle = _andValue + ", " + reportSubtitle;
                                }
                                else
                                {
                                    reportSubtitle = _andValue;
                                }
                            }
                            _columnName = GetMessage("lbl address city");
                            _bDrillDownReport = false;
                            _bDrillDownDetail = true;
                            _strDrillDownArg = "also";
                        }
                        if (!String.IsNullOrEmpty(_alsoValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.city, DimensionFilterOperator.EqualTo, _alsoValue);
                            ReportTitle = _columnName;
                            if (_alsoValue != "(not set)") // TODO: "(not set)" is Google-specific
                            {
                                if (reportSubtitle.Length > 0)
                                {
                                    reportSubtitle = _alsoValue + ", " + reportSubtitle;
                                }
                                else
                                {
                                    reportSubtitle = _alsoValue;
                                }
                            }
                            _defaultView = DisplayView.Detail;
                        }
                        UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.Visits, allowSorting);
                        reports = this.GetReportDataList(provider, _reportType, startDate, endDate, criteria);
                    }
                    break;
                case ReportType.NewVsReturning:
                    ReportTitle = _reportTypeName = GetMessage("sam new vs returning");
                    if (IsDimensionSupported(_dimensions.visitorType) && IsMetricSupported(_metrics.visitors))
                    {
                        reportSummary = GetMessage("lbl visit from visitor types");
                        reportSegSummary = GetMessage("lbl visit from visitor types in segment");
                        _columnName = GetMessage("lbl visitor type");
                        if (!String.IsNullOrEmpty(_forValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.visitorType, DimensionFilterOperator.EqualTo, _forValue);
                            ReportTitle = _columnName;
                            reportSubtitle = _forValue;
                            _defaultView = DisplayView.Detail;
                        }
                        UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.Visits, allowSorting);
                        reports = this.GetReportDataList(provider, _reportType, startDate, endDate, criteria);
                    }
                    break;
                case ReportType.Languages:
                    ReportTitle = _reportTypeName = GetMessage("sam languages");
                    if (IsDimensionSupported(_dimensions.language))
                    {
                        reportSummary = GetMessage("lbl visit used languages");
                        reportSegSummary = GetMessage("lbl visit used languages in segment");
                        _columnName = GetMessage("generic language");
                        _defaultView = DisplayView.Table;
                        if (!String.IsNullOrEmpty(_forValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.language, DimensionFilterOperator.EqualTo, _forValue);
                            ReportTitle = _columnName;
                            reportSubtitle = _forValue;
                            _defaultView = DisplayView.Detail;
                        }
                        UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.Visits, allowSorting);
                        reports = this.GetReportDataList(provider, _reportType, startDate, endDate, criteria);
                    }
                    break;

                case ReportType.Browsers:
                    ReportTitle = _reportTypeName = GetMessage("sam browsers");
                    if (IsDimensionSupported(_dimensions.browser))
                    {
                        reportSummary = GetMessage("lbl visit used browsers");
                        reportSegSummary = GetMessage("lbl visit used browsers in segment");
                        _columnName = GetMessage("lbl browser");
                        _bDrillDownReport = true;
                        _bDrillDownDetail = false;
                        if (!String.IsNullOrEmpty(_forValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.browser, DimensionFilterOperator.EqualTo, _forValue);
                            criteria.Dimensions.Insert(0, _dimensions.browserVersion);
                            reportSummary = GetMessage("lbl visit used browser versions");
                            reportSegSummary = GetMessage("lbl visit used browser versions in segment");
                            ReportTitle = _columnName;
                            reportSubtitle = _forValue + " ";
                            _columnName = GetMessage("lbl browser version");
                            _bDrillDownReport = false;
                            _bDrillDownDetail = true;
                            _strDrillDownArg = "and";
                        }
                        if (!String.IsNullOrEmpty(_andValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.browserVersion, DimensionFilterOperator.EqualTo, _andValue);
                            ReportTitle = _columnName;
                            reportSubtitle += _andValue;
                            _defaultView = DisplayView.Detail;
                        }
                        UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.Visits, allowSorting);
                        reports = this.GetReportDataList(provider, _reportType, startDate, endDate, criteria);
                    }
                    break;
                case ReportType.OS:
                    ReportTitle = _reportTypeName = GetMessage("sam operating systems");
                    if (IsDimensionSupported(_dimensions.operatingSystem))
                    {
                        reportSummary = GetMessage("lbl visit used operating systems");
                        reportSegSummary = GetMessage("lbl visit used operating systems in segment");
                        _columnName = GetMessage("lbl operating system");
                        _bDrillDownReport = true;
                        _bDrillDownDetail = false;
                        if (!String.IsNullOrEmpty(_forValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.operatingSystem, DimensionFilterOperator.EqualTo, _forValue);
                            criteria.Dimensions.Insert(0, _dimensions.operatingSystemVersion);
                            reportSummary = GetMessage("lbl visit used os versions");
                            reportSegSummary = GetMessage("lbl visit used os versions in segment");
                            ReportTitle = _columnName;
                            reportSubtitle = _forValue + " ";
                            _columnName = GetMessage("lbl os version");
                            _bDrillDownReport = false;
                            _bDrillDownDetail = true;
                            _strDrillDownArg = "and";
                        }
                        if (!String.IsNullOrEmpty(_andValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.operatingSystemVersion, DimensionFilterOperator.EqualTo, _andValue);
                            ReportTitle = _columnName;
                            reportSubtitle += _andValue;
                            _defaultView = DisplayView.Detail;
                        }
                        UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.Visits, allowSorting);
                        reports = this.GetReportDataList(provider, _reportType, startDate, endDate, criteria);
                    }
                    break;
                case ReportType.Platforms:
                    ReportTitle = _reportTypeName = GetMessage("sam browsers and os");
                    if (IsDimensionSupported(_dimensions.browser) && IsDimensionSupported(_dimensions.operatingSystem))
                    {
                        reportSummary = GetMessage("lbl visit used browser and os combinations");
                        reportSegSummary = GetMessage("lbl visit used browser and os combinations in segment");
                        _columnName = GetMessage("lbl browser and os");
                        if (!String.IsNullOrEmpty(_forValue))
                        {
                            string[] values = _forValue.Split(new char[] { '/' }, 2);
                            criteria.DimensionFilters.AddFilter(_dimensions.browser, DimensionFilterOperator.EqualTo, values[0].Trim());
                            criteria.DimensionFilters.AddFilter(_dimensions.operatingSystem, DimensionFilterOperator.EqualTo, values[1].Trim());
                            ReportTitle = _columnName;
                            reportSubtitle = _forValue;
                            _defaultView = DisplayView.Detail;
                        }
                        UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.Visits, allowSorting);
                        reports = this.GetReportDataList(provider, _reportType, startDate, endDate, criteria);
                    }
                    break;
                case ReportType.Colors:
                    ReportTitle = _reportTypeName = GetMessage("sam screen colors");
                    if (IsDimensionSupported(_dimensions.screenColors))
                    {
                        reportSummary = GetMessage("lbl visit used screen colors");
                        reportSegSummary = GetMessage("lbl visit used screen colors in segment");
                        _columnName = GetMessage("sam screen colors");
                        if (!String.IsNullOrEmpty(_forValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.screenColors, DimensionFilterOperator.EqualTo, _forValue);
                            ReportTitle = _columnName;
                            reportSubtitle = _forValue;
                            _defaultView = DisplayView.Detail;
                        }
                        UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.Visits, allowSorting);
                        reports = this.GetReportDataList(provider, _reportType, startDate, endDate, criteria);
                    }
                    break;
                case ReportType.Resolutions:
                    ReportTitle = _reportTypeName = GetMessage("sam screen resolutions");
                    if (IsDimensionSupported(_dimensions.screenResolution))
                    {
                        reportSummary = GetMessage("lbl visit used screen resolutions");
                        reportSegSummary = GetMessage("lbl visit used screen resolutions in segment");
                        _columnName = GetMessage("lbl screen resolution");
                        if (!String.IsNullOrEmpty(_forValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.screenResolution, DimensionFilterOperator.EqualTo, _forValue);
                            ReportTitle = _columnName;
                            reportSubtitle = _forValue;
                            _defaultView = DisplayView.Detail;
                        }
                        UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.Visits, allowSorting);
                        reports = this.GetReportDataList(provider, _reportType, startDate, endDate, criteria);
                    }
                    break;
                case ReportType.Flash:
                    ReportTitle = _reportTypeName = GetMessage("sam flash versions");
                    if (IsDimensionSupported(_dimensions.flashVersion))
                    {
                        reportSummary = GetMessage("lbl visit used flash versions");
                        reportSegSummary = GetMessage("lbl visit used flash versions in segment");
                        _columnName = GetMessage("lbl flash version");
                        if (!String.IsNullOrEmpty(_forValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.flashVersion, DimensionFilterOperator.EqualTo, _forValue);
                            ReportTitle = _columnName;
                            reportSubtitle = _forValue;
                            _defaultView = DisplayView.Detail;
                        }
                        UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.Visits, allowSorting);
                        reports = this.GetReportDataList(provider, _reportType, startDate, endDate, criteria);
                    }
                    break;
                case ReportType.Java:
                    ReportTitle = _reportTypeName = GetMessage("sam java support");
                    if (IsDimensionSupported(_dimensions.javaEnabled))
                    {
                        reportSummary = GetMessage("lbl visit used java support");
                        reportSegSummary = GetMessage("lbl visit used java support in segment");
                        _columnName = ReportTitle;
                        if (!String.IsNullOrEmpty(_forValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.javaEnabled, DimensionFilterOperator.EqualTo, _forValue);
                            ReportTitle = _columnName;
                            reportSubtitle = _forValue;
                            _defaultView = DisplayView.Detail;
                        }
                        UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.Visits, allowSorting);
                        reports = this.GetReportDataList(provider, _reportType, startDate, endDate, criteria);
                    }
                    break;

                case ReportType.NetworkLocations:
                    ReportTitle = _reportTypeName = GetMessage("sam network location");
                    if (IsDimensionSupported(_dimensions.networkLocation))
                    {
                        reportSummary = GetMessage("lbl visit came from network locations");
                        reportSegSummary = GetMessage("lbl visit came from network locations in segment");
                        _columnName = ReportTitle;
                        _defaultView = DisplayView.Table;
                        if (!String.IsNullOrEmpty(_forValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.networkLocation, DimensionFilterOperator.EqualTo, _forValue);
                            ReportTitle = _columnName;
                            reportSubtitle = _forValue;
                            _defaultView = DisplayView.Detail;
                        }
                        UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.Visits, allowSorting);
                        reports = this.GetReportDataList(provider, _reportType, startDate, endDate, criteria);
                    }
                    break;
                case ReportType.Hostnames:
                    ReportTitle = _reportTypeName = GetMessage("sam hostnames");
                    if (IsDimensionSupported(_dimensions.hostname))
                    {
                        reportSummary = GetMessage("lbl visit came from hostnames");
                        reportSegSummary = GetMessage("lbl visit came from hostnames in segment");
                        _columnName = GetMessage("lbl hostname");
                        _defaultView = DisplayView.Table;
                        if (!String.IsNullOrEmpty(_forValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.hostname, DimensionFilterOperator.EqualTo, _forValue);
                            ReportTitle = _columnName;
                            reportSubtitle = _forValue;
                            _defaultView = DisplayView.Detail;
                        }
                        UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.Visits, allowSorting);
                        reports = this.GetReportDataList(provider, _reportType, startDate, endDate, criteria);
                    }
                    break;
                case ReportType.ConnectionSpeeds:
                    ReportTitle = _reportTypeName = GetMessage("sam connection speeds");
                    if (IsDimensionSupported(_dimensions.connectionSpeed))
                    {
                        reportSummary = GetMessage("lbl visit used connection speeds");
                        reportSegSummary = GetMessage("lbl visit used connection speeds in segment");
                        _columnName = GetMessage("lbl connection speed");
                        _defaultView = DisplayView.Table;
                        if (!String.IsNullOrEmpty(_forValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.connectionSpeed, DimensionFilterOperator.EqualTo, _forValue);
                            ReportTitle = _columnName;
                            reportSubtitle = _forValue;
                            _defaultView = DisplayView.Detail;
                        }
                        UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.Visits, allowSorting);
                        reports = this.GetReportDataList(provider, _reportType, startDate, endDate, criteria);
                    }
                    break;

                case ReportType.UserDefined:
                    ReportTitle = _reportTypeName = GetMessage("sam user defined");
                    if (IsDimensionSupported(_dimensions.userDefinedValue))
                    {
                        reportSummary = GetMessage("lbl visit used user defined values");
                        reportSegSummary = GetMessage("lbl visit used user defined values in segment");
                        _columnName = GetMessage("lbl user defined value");
                        if (!String.IsNullOrEmpty(_forValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.userDefinedValue, DimensionFilterOperator.EqualTo, _forValue);
                            ReportTitle = _columnName;
                            reportSubtitle = _forValue;
                            _defaultView = DisplayView.Detail;
                        }
                        UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.Visits, allowSorting);
                        reports = this.GetReportDataList(provider, _reportType, startDate, endDate, criteria);
                    }
                    break;

                case ReportType.Direct:
                    ReportTitle = _reportTypeName = GetMessage("sam direct traffic");
                    if (IsDimensionSupported(_dimensions.source))
                    {
                        reportSummary = GetMessage("lbl visit came directly to this site");
                        reportSegSummary = GetMessage("lbl visit came directly to this site in segment");
                        _columnName = GetMessage("lbl source");
                        _defaultView = DisplayView.Detail;
                        if (DisplayView.Detail == this.View)
                        {
                            criteria.AggregationPeriod = AggregationTimePeriod.ByDay;
                        }
                        UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.Visits, allowSorting);
                        reports = this.GetReportDataList(provider, _reportType, startDate, endDate, criteria);
                    }
                    break;
                case ReportType.Referring:
                    ReportTitle = _reportTypeName = GetMessage("sam referring sites");
                    if (IsDimensionSupported(_dimensions.source))
                    {
                        reportSummary = GetMessage("lbl referring sites sent visits via sources");
                        reportSegSummary = GetMessage("lbl referring sites sent visits via sources in segment");
                        _columnName = GetMessage("lbl referring site");
                        _defaultView = DisplayView.Table;
                        _bDrillDownReport = true;
                        _bDrillDownDetail = false;
                        if (!String.IsNullOrEmpty(_forValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.source, DimensionFilterOperator.EqualTo, _forValue);
                            criteria.Dimensions.Insert(0, _dimensions.referralPath);
                            reportSummary = GetMessage("lbl referring site sent visits via paths");
                            reportSegSummary = GetMessage("lbl referring site sent visits via paths");
                            ReportTitle = _columnName;
                            reportSubtitle = _forValue + " ";
                            _columnName = GetMessage("lbl referring link");
                            _bDrillDownReport = false;
                            _bDrillDownDetail = true;
                            _strDrillDownArg = "and";
                        }
                        if (!String.IsNullOrEmpty(_andValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.referralPath, DimensionFilterOperator.EqualTo, _andValue);
                            ReportTitle = _columnName;
                            reportSubtitle += ":\xA0 " + _andValue;
                            _defaultView = DisplayView.Detail;
                        }
                        UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.Visits, allowSorting);
                        reports = this.GetReportDataList(provider, _reportType, startDate, endDate, criteria);
                    }
                    break;
                case ReportType.SearchEngines:
                    ReportTitle = _reportTypeName = GetMessage("sam search engines");
                    if (IsDimensionSupported(_dimensions.source))
                    {
                        reportSummary = GetMessage("lbl search sent total visits via sources");
                        reportSegSummary = GetMessage("lbl search sent total visits via sources in segment");
                        _columnName = GetMessage("lbl search engine");
                        _defaultView = DisplayView.Table;
                        _bDrillDownReport = true;
                        _bDrillDownDetail = false;
                        if (!String.IsNullOrEmpty(_forValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.source, DimensionFilterOperator.EqualTo, _forValue);
                            criteria.Dimensions.Insert(0, _dimensions.keyword);
                            reportSummary = GetMessage("lbl search sent total visits via keywords");
                            reportSegSummary = GetMessage("lbl search sent total visits via keywords in segment");
                            ReportTitle = _columnName;
                            reportSubtitle = _forValue + " ";
                            _columnName = GetMessage("lbl keyword");
                            _bDrillDownReport = false;
                            _bDrillDownDetail = true;
                            _strDrillDownArg = "and";
                        }
                        if (!String.IsNullOrEmpty(_andValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.keyword, DimensionFilterOperator.EqualTo, _andValue);
                            ReportTitle = _columnName;
                            reportSubtitle += ":\xA0 \"" + _andValue + "\"";
                            _defaultView = DisplayView.Detail;
                        }
                        UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.Visits, allowSorting);
                        reports = this.GetReportDataList(provider, _reportType, startDate, endDate, criteria);
                    }
                    break;
                case ReportType.TrafficSources:
                    ReportTitle = _reportTypeName = GetMessage("sam all traffic sources");
                    if (IsDimensionSupported(_dimensions.source) && IsDimensionSupported(_dimensions.medium))
                    {
                        reportSummary = GetMessage("lbl all traffic sources sent visits via sources and mediums");
                        reportSegSummary = GetMessage("lbl all traffic sources sent visits via sources and mediums in segment");
                        _columnName = GetMessage("lbl source");
                        _defaultView = DisplayView.Table;
                        if (!String.IsNullOrEmpty(_forValue))
                        {
                            string[] values = _forValue.Split(new char[] { '/' }, 2);
                            criteria.DimensionFilters.AddFilter(_dimensions.source, DimensionFilterOperator.EqualTo, values[0].Trim());
                                criteria.DimensionFilters.AddFilter(_dimensions.medium, DimensionFilterOperator.EqualTo, values[1].Trim());
                            ReportTitle = _columnName;
                            reportSubtitle = _forValue;
                            _defaultView = DisplayView.Detail;
                        }
                        UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.Visits, allowSorting);
                        reports = this.GetReportDataList(provider, _reportType, startDate, endDate, criteria);
                    }
                    break;
                case ReportType.Keywords:
                    ReportTitle = _reportTypeName = GetMessage("sam keywords");
                    if (IsDimensionSupported(_dimensions.keyword))
                    {
                        reportSummary = GetMessage("lbl search sent total visits via keywords");
                        reportSegSummary = GetMessage("lbl search sent total visits via keywords in segment");
                        _columnName = GetMessage("lbl keyword");
                        _defaultView = DisplayView.Table;
                        if (!String.IsNullOrEmpty(_forValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.keyword, DimensionFilterOperator.EqualTo, _forValue);
                            ReportTitle = _columnName;
                            reportSubtitle = _forValue;
                            _defaultView = DisplayView.Detail;
                        }
                        UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.Visits, allowSorting);
                        reports = this.GetReportDataList(provider, _reportType, startDate, endDate, criteria);
                    }
                    break;
                case ReportType.Campaigns:
                    ReportTitle = _reportTypeName = GetMessage("sam campaigns");
                    if (IsDimensionSupported(_dimensions.campaign))
                    {
                        reportSummary = GetMessage("lbl campaign traffic sent visits via campaigns");
                        reportSegSummary = GetMessage("lbl campaign traffic sent visits via campaigns in segment");
                        _columnName = GetMessage("lbl campaign");
                        _defaultView = DisplayView.Table;
                        if (!String.IsNullOrEmpty(_forValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.campaign, DimensionFilterOperator.EqualTo, _forValue);
                            ReportTitle = _columnName;
                            reportSubtitle = _forValue;
                            _defaultView = DisplayView.Detail;
                        }
                        UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.Visits, allowSorting);
                        reports = this.GetReportDataList(provider, _reportType, startDate, endDate, criteria);
                    }
                    break;
                case ReportType.AdVersions:
                    ReportTitle = _reportTypeName = GetMessage("sam ad versions");
                    if (IsDimensionSupported(_dimensions.adContent))
                    {
                        reportSummary = GetMessage("lbl ads sent visits via ad contents");
                        reportSegSummary = GetMessage("lbl ads sent visits via ad contents in segment");
                        _columnName = GetMessage("lbl ad content");
                        _defaultView = DisplayView.Table;
                        if (!String.IsNullOrEmpty(_forValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.adContent, DimensionFilterOperator.EqualTo, _forValue);
                            ReportTitle = _columnName;
                            reportSubtitle = _forValue;
                            _defaultView = DisplayView.Detail;
                        }
                        UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.Visits, allowSorting);
                        reports = this.GetReportDataList(provider, _reportType, startDate, endDate, criteria);
                    }
                    break;

                case ReportType.TopContent:
                    ReportTitle = _reportTypeName = GetMessage("sam top content");
                    if (IsDimensionSupported(_dimensions.pagePath))
                    {
                        reportSummary = GetMessage("lbl pages were viewed a total of times");
                        reportSegSummary = GetMessage("lbl pages were viewed a total of times in segment");
                        reportSummaryShort = GetMessage("lbl pages were viewed");
                        _columnName = GetMessage("page lbl");
                        _defaultView = DisplayView.Table;
                        if (!String.IsNullOrEmpty(_forValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.pagePath, DimensionFilterOperator.EqualTo, _forValue);
                            ReportTitle = _columnName;
                            reportSubtitle = _forValue;
                            _defaultView = DisplayView.Detail;
                        }
                        UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.PageViews, allowSorting);
                        reports = this.GetReportDataList(provider, _reportType, startDate, endDate, criteria);
                        _reportDisplayData = ReportDisplayData.PageData;
                    }
                    break;
                case ReportType.ContentByTitle:
                    ReportTitle = _reportTypeName = GetMessage("sam content by title");
                    if (IsDimensionSupported(_dimensions.pageTitle))
                    {
                        reportSummary = GetMessage("lbl page titles were viewed a total times");
                        reportSegSummary = GetMessage("lbl page titles were viewed a total times in segment");
                        reportSummaryShort = GetMessage("lbl page titles were viewed");
                        _columnName = GetMessage("lbl page title");
                        _defaultView = DisplayView.Table;
                        _bDrillDownReport = true;
                        _bDrillDownDetail = false;
                        if (!String.IsNullOrEmpty(_forValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.pageTitle, DimensionFilterOperator.EqualTo, _forValue);
                            criteria.Dimensions.Insert(0, _dimensions.pagePath);
                            reportSummary = GetMessage("lbl page visited times via pages");
                            reportSegSummary = GetMessage("lbl page visited times via pages in segment");
                            ReportTitle = _columnName;
                            reportSubtitle = _forValue + " ";
                            _columnName = GetMessage("page lbl");
                            _bDrillDownReport = false;
                            _bDrillDownDetail = true;
                            _strDrillDownArg = "and";
                        }
                        if (!String.IsNullOrEmpty(_andValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.pagePath, DimensionFilterOperator.EqualTo, _andValue);
                            ReportTitle = _columnName;
                            reportSubtitle += ":\xA0 \"" + _andValue + "\"";
                            _defaultView = DisplayView.Detail;
                        }
                        UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.PageViews, allowSorting);
                        reports = this.GetReportDataList(provider, _reportType, startDate, endDate, criteria);
                        _reportDisplayData = ReportDisplayData.PageData;
                    }
                    break;
                case ReportType.TopLanding:
                    ReportTitle = _reportTypeName = GetMessage("sam top landing pages");
                    if (IsDimensionSupported(_dimensions.landingPagePath) && IsMetricSupported(_metrics.bounces) && IsMetricSupported(_metrics.entrances))
                    {
                        reportSummary = GetMessage("lbl visit entered the site through pages");
                        reportSegSummary = GetMessage("lbl visit entered the site through pages in segment");
                        _columnName = GetMessage("page lbl");
                        _defaultView = DisplayView.Table;
                        if (!String.IsNullOrEmpty(_forValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.pagePath, DimensionFilterOperator.EqualTo, _forValue);
                            ReportTitle = _columnName;
                            reportSubtitle = _forValue;
                            _defaultView = DisplayView.Detail;

                            UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.PageViews, allowSorting);
                            reports = this.GetReportDataList(provider, ReportType.TopContent, startDate, endDate, criteria);
                            _reportDisplayData = ReportDisplayData.PageData;
                        }
                        else
                        {
                            UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.Entrances, allowSorting);
                            reports = this.GetReportDataList(provider, ReportType.TopLanding, startDate, endDate, criteria);
                            _reportDisplayData = ReportDisplayData.LandingPageData;
                        }
                    }
                    break;
                case ReportType.TopExit:
                    ReportTitle = _reportTypeName = GetMessage("sam top exit pages");
                    if (IsDimensionSupported(_dimensions.exitPagePath) && IsMetricSupported(_metrics.exits) && IsMetricSupported(_metrics.pageviews))
                    {
                        reportSummary = GetMessage("lbl visits exited from pages");
                        reportSegSummary = GetMessage("lbl visits exited from pages in segment");
                        _columnName = GetMessage("page lbl");
                        _defaultView = DisplayView.Table;
                        if (!String.IsNullOrEmpty(_forValue))
                        {
                            criteria.DimensionFilters.AddFilter(_dimensions.pagePath, DimensionFilterOperator.EqualTo, _forValue);
                            ReportTitle = _columnName;
                            reportSubtitle = _forValue;
                            _defaultView = DisplayView.Detail;

                            UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.PageViews, allowSorting);
                            reports = this.GetReportDataList(provider, ReportType.TopContent, startDate, endDate, criteria);
                            _reportDisplayData = ReportDisplayData.PageData;
                        }
                        else
                        {
                            UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.Exits, allowSorting);
                            reports = this.GetReportDataList(provider, ReportType.TopExit, startDate, endDate, criteria);
                            _reportDisplayData = ReportDisplayData.ExitPageData;
                        }
                    }
                    break;
                #endregion
                #region SiteCatalyst Reports
                case ReportType.TimeVisitOnSite:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam time spent per visit");
                    if (IsDimensionSupported(_dimensions.timeVisit) && IsMetricSupported(_metrics.visits) && IsMetricSupported(_metrics.pageviews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.SiteMetricData;

                    }
                    break;
                case ReportType.Pages:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = GetMessage("sam pages");
                    _columnName = GetMessage("page lbl");
                    if (IsDimensionSupported(_dimensions.pageTitle) && IsMetricSupported(_metrics.pageviews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.SiteContentData;
                    }
                    break;
                case ReportType.SiteSection:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam site sections");
                    if (IsDimensionSupported(_dimensions.siteSection) && IsMetricSupported(_metrics.pageviews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.SiteContentData;
                    }
                    break;
                case ReportType.Server:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam servers");
                    if (IsDimensionSupported(_dimensions.hostname) && IsMetricSupported(_metrics.pageviews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.SiteContentData;
                    }
                    break;
                case ReportType.LinkExit:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam exit links");
                    if (IsDimensionSupported(_dimensions.exitPagePath) && IsMetricSupported(_metrics.pageviews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.SiteContentData;
                    }
                    break;
                case ReportType.LinkDownload:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam file downloads");
                    if (IsDimensionSupported(_dimensions.linkDownload) && IsMetricSupported(_metrics.pageviews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.SiteContentData;
                    }
                    break;
                case ReportType.LinkCustom:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam custom links");
                    if (IsDimensionSupported(_dimensions.linkCustom) && IsMetricSupported(_metrics.pageviews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.SiteContentData;
                    }
                    break;
                case ReportType.PagesNotFound:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam pages not found");
                    if (IsDimensionSupported(_dimensions.pagesNotFound) && IsMetricSupported(_metrics.pageviews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.SiteContentData;
                    }
                    break;
                case ReportType.MobileDeviceName:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam devices");
                    if (IsDimensionSupported(_dimensions.mobileDeviceName) && IsMetricSupported(_metrics.mobileViews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.MobileData;
                    }
                    break;
                case ReportType.MobileManufacturer:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam manufacturer");
                    if (IsDimensionSupported(_dimensions.mobileManufacturer) && IsMetricSupported(_metrics.mobileViews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.MobileData;
                    }
                    break;
                case ReportType.MobileScreenSize:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam screen size");
                    if (IsDimensionSupported(_dimensions.mobileScreenSize) && IsMetricSupported(_metrics.mobileViews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.MobileData;
                    }
                    break;
                case ReportType.MobileScreenHeight:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam screen height");
                    if (IsDimensionSupported(_dimensions.mobileScreenHeight) && IsMetricSupported(_metrics.mobileViews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.MobileData;
                    }
                    break;
                case ReportType.MobileScreenWidth:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam screen width");
                    if (IsDimensionSupported(_dimensions.mobileScreenWidth) && IsMetricSupported(_metrics.mobileViews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.MobileData;
                    }
                    break;
                case ReportType.MobileCookieSupport:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam cookie support");
                    if (IsDimensionSupported(_dimensions.mobileCookieSupport) && IsMetricSupported(_metrics.mobileViews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.MobileData;
                    }
                    break;
                case ReportType.MobileImageSupport:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam image support");
                    if (IsDimensionSupported(_dimensions.mobileImageSupport) && IsMetricSupported(_metrics.mobileViews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.MobileData;
                    }
                    break;
                case ReportType.MobileColorDepth:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam color depth");
                    if (IsDimensionSupported(_dimensions.mobileColorDepth) && IsMetricSupported(_metrics.mobileViews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.MobileData;
                    }
                    break;
                case ReportType.MobileAudioSupport:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam audio support");
                    if (IsDimensionSupported(_dimensions.mobileAudioSupport) && IsMetricSupported(_metrics.mobileViews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.MobileData;
                    }
                    break;
                case ReportType.MobileVideoSupport:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam video support");
                    if (IsDimensionSupported(_dimensions.mobileVideoSupport) && IsMetricSupported(_metrics.mobileViews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.MobileData;
                    }
                    break;
                case ReportType.MobileDRM:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam drm");
                    if (IsDimensionSupported(_dimensions.mobileDRM) && IsMetricSupported(_metrics.mobileViews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.MobileData;
                    }
                    break;
                case ReportType.MobileNetProtocols:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam net protocols");
                    if (IsDimensionSupported(_dimensions.mobileNetProtocols) && IsMetricSupported(_metrics.mobileViews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.MobileData;
                    }
                    break;
                case ReportType.MobileOS:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam operating system");
                    if (IsDimensionSupported(_dimensions.mobileOS) && IsMetricSupported(_metrics.mobileViews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.MobileData;
                    }
                    break;
                case ReportType.MobileJavaVM:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam java version");
                    if (IsDimensionSupported(_dimensions.mobileJavaVM) && IsMetricSupported(_metrics.mobileViews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.MobileData;
                    }
                    break;
                case ReportType.MobileMaxBookmarkUrlLength:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam bookmark url length");
                    if (IsDimensionSupported(_dimensions.mobileMaxBookmarkUrlLength) && IsMetricSupported(_metrics.mobileViews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.MobileData;
                    }
                    break;
                case ReportType.MobileMaxMailUrlLength:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam mail url length");
                    if (IsDimensionSupported(_dimensions.mobileMaxMailUrlLength) && IsMetricSupported(_metrics.mobileViews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.MobileData;
                    }
                    break;
                case ReportType.MobileMaxBroswerUrlLength:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam browser url length");
                    if (IsDimensionSupported(_dimensions.mobileMaxBrowserUrlLength) && IsMetricSupported(_metrics.mobileViews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.MobileData;
                    }
                    break;
                case ReportType.MobileDeviceNumberTransmit:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam device number transmit (on/off)");
                    if (IsDimensionSupported(_dimensions.mobileDeviceNumberTransmit) && IsMetricSupported(_metrics.mobileViews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.MobileData;
                    }
                    break;
                case ReportType.MobilePushToTalk:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam ptt");
                    if (IsDimensionSupported(_dimensions.mobilePushToTalk) && IsMetricSupported(_metrics.mobileViews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.MobileData;
                    }
                    break;
                case ReportType.MobileMailDecoration:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam decoration mail support");
                    if (IsDimensionSupported(_dimensions.mobileMailDecoration) && IsMetricSupported(_metrics.mobileViews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.MobileData;
                    }
                    break;
                case ReportType.MobileInformationServices:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam information services");
                    if (IsDimensionSupported(_dimensions.mobileInformationServices) && IsMetricSupported(_metrics.mobileViews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.MobileData;
                    }
                    break;
                case ReportType.Reloads:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam reloads");
                    if (IsDimensionSupported(_dimensions.pageTitle) && IsMetricSupported(_metrics.reloads))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.ReloadData;
                    }
                    break;
                case ReportType.AveragePageDepth:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam page depth");
                    if (IsDimensionSupported(_dimensions.pageDepth) && IsMetricSupported(_metrics.pageviews) && IsMetricSupported(_metrics.visits))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.SiteMetricData;
                    }
                    break;
                case ReportType.TimeVisitOnPage:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam time spent on page");
                    if (IsDimensionSupported(_dimensions.timeVisit) && IsMetricSupported(_metrics.instances))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.InstancesData;
                    }
                    break;
                case ReportType.EntryPage:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam entry pages");
                    if (IsDimensionSupported(_dimensions.landingPagePath) && IsMetricSupported(_metrics.pageviews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.SiteContentData;
                    }
                    break;
                case ReportType.EntryPageOriginal:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam original entry pages");
                    if (IsDimensionSupported(_dimensions.entryPageOriginal) && IsMetricSupported(_metrics.pageviews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.SiteContentData;
                    }
                    break;
                case ReportType.SearchEngineKeyword:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam search keywords - all");
                    if (IsDimensionSupported(_dimensions.searchKeyword) && IsMetricSupported(_metrics.pageviews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.SiteContentData;
                    }
                    break;
                case ReportType.SearchEnginePaidKeyword:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam search keywords - paid");
                    if (IsDimensionSupported(_dimensions.searchEnginePaidKeyword) && IsMetricSupported(_metrics.pageviews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.SiteContentData;
                    }
                    break;
                case ReportType.SearchEngineNaturalKeyword:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam search keywords - natural");
                    if (IsDimensionSupported(_dimensions.searchEngineNaturalKeyword) && IsMetricSupported(_metrics.pageviews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.SiteContentData;
                    }
                    break;
                case ReportType.SiteCatalystSearchEngine:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam search engines - all");
                    if (IsDimensionSupported(_dimensions.searchEngine) && IsMetricSupported(_metrics.pageviews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.SiteContentData;
                    }
                    break;
                case ReportType.SearchEnginePaid:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam search engines - paid");
                    if (IsDimensionSupported(_dimensions.searchEnginePaid) && IsMetricSupported(_metrics.pageviews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.SiteContentData;
                    }
                    break;
                case ReportType.SearchEngineNatural:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam search engines - natural");
                    if (IsDimensionSupported(_dimensions.searchEngineNatural) && IsMetricSupported(_metrics.pageviews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.SiteContentData;
                    }
                    break;
                case ReportType.SearchEngineNaturalPageRank:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam all search page ranking");
                    if (IsDimensionSupported(_dimensions.searchEngineNaturalPageRank) && IsMetricSupported(_metrics.pageviews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.SiteContentData;
                    }
                    break;
                case ReportType.ReferringDomain:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam referring domains");
                    if (IsDimensionSupported(_dimensions.referringDomain) && IsMetricSupported(_metrics.pageviews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.SiteContentData;
                    }
                    break;
                case ReportType.ReferringDomainOriginal:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam search keywords - all");
                    if (IsDimensionSupported(_dimensions.searchKeyword) && IsMetricSupported(_metrics.pageviews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.SiteContentData;
                    }
                    break;
                case ReportType.Referrer:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam referrers");
                    if (IsDimensionSupported(_dimensions.source) && IsMetricSupported(_metrics.instances))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.InstancesData;
                    }
                    break;
                case ReportType.ReferrerType:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam referrer type");
                    if (IsDimensionSupported(_dimensions.medium) && IsMetricSupported(_metrics.instances))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.InstancesData;
                    }
                    break;
                case ReportType.Products:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam products");
                    if (IsDimensionSupported(_dimensions.productName) && IsMetricSupported(_metrics.pageviews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.SiteContentData;
                    }
                    break;
                case ReportType.ReturnFrequency:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam return frequency");
                    if (IsDimensionSupported(_dimensions.returnFrequency) && IsMetricSupported(_metrics.visits))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.VisitsData;
                    }
                    break;
                case ReportType.VisitNumber:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam visit number");
                    if (IsDimensionSupported(_dimensions.countOfVisits) && IsMetricSupported(_metrics.pageviews) && IsMetricSupported(_metrics.visits))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.PageVisitsData;
                    }
                    break;
                case ReportType.GeoCountries:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam countries");
                    if (IsDimensionSupported(_dimensions.country) && IsMetricSupported(_metrics.visitors))
                    {
                        _bDrillDownReport = false;
                        _bDrillDownDetail = false;
                        reportSummary = "";
                        _defaultView = DisplayView.Table;
                        report = _dataManager.GetLocations(provider, startDate, endDate, criteria);
                        _reportDisplayData = ReportDisplayData.VisitorsData;
                    }
                    break;
                case ReportType.GeoRegions:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam regions");
                    if (IsDimensionSupported(_dimensions.region) && IsMetricSupported(_metrics.visitors))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.VisitorsData;
                    }
                    break;
                case ReportType.GeoCities:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam cities");
                    if (IsDimensionSupported(_dimensions.city) && IsMetricSupported(_metrics.visitors))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.VisitorsData;
                    }
                    break;
                case ReportType.GeoDMA:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam u.s. dma");
                    if (IsDimensionSupported(_dimensions.geoDMA) && IsMetricSupported(_metrics.visitors))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.VisitorsData;
                    }
                    break;
                case ReportType.HomePage:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = GetMessage("sam visitor home page");
                    _columnName = GetMessage("page lbl");
                    if (IsDimensionSupported(_dimensions.pageTitle) && IsMetricSupported(_metrics.visits))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.VisitsData;
                    }
                    break;
                case ReportType.SiteCatalystLanguage:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam languages");
                    if (IsDimensionSupported(_dimensions.language) && IsMetricSupported(_metrics.visitors) && IsMetricSupported(_metrics.pageviews))
                    {
                        _bDrillDownReport = false;
                        _bDrillDownDetail = false;
                        reportSummary = "";
                        _defaultView = DisplayView.Table;
                        report = _dataManager.GetLanguages(provider, startDate, endDate, criteria);
                        _reportDisplayData = ReportDisplayData.PageVisitorsData;
                    }
                    break;
                case ReportType.TimeZone:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam time zones");
                    if (IsDimensionSupported(_dimensions.timeVisit) && IsMetricSupported(_metrics.visitors) && IsMetricSupported(_metrics.pageviews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.PageVisitorsData;
                    }
                    break;
                case ReportType.Domain:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam domains");
                    if (IsDimensionSupported(_dimensions.networkLocation) && IsMetricSupported(_metrics.pageviews))
                    {

                        reportSummary = GetMessage("lbl visit came from network locations");
                        _defaultView = DisplayView.Table;
                        report = _dataManager.GetNetworkLocations(provider, startDate, endDate, criteria);
                        _reportDisplayData = ReportDisplayData.PageVisitorsData;
                    }
                    break;
                case ReportType.TopLevelDomain:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam top level domains");
                    if (IsDimensionSupported(_dimensions.topLevelDomain) && IsMetricSupported(_metrics.visitors) && IsMetricSupported(_metrics.pageviews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.PageVisitorsData;
                    }
                    break;
                case ReportType.SiteCatalystBrowsers:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam browsers");
                    if (IsDimensionSupported(_dimensions.browser) && IsMetricSupported(_metrics.visitors) && IsMetricSupported(_metrics.pageviews))
                    {
                        _bDrillDownReport = false;
                        _bDrillDownDetail = false;
                        report = _dataManager.GetBrowsers(provider, startDate, endDate, criteria);
                        _reportDisplayData = ReportDisplayData.SiteContentData;
                        this.ShowPieChart = false;
                    }
                    break;
                case ReportType.BrowserType:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam browser types");
                    if (IsDimensionSupported(_dimensions.browserType) && IsMetricSupported(_metrics.visitors))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.VisitorsData;
                    }
                    break;
                case ReportType.BrowserWidth:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam browser width");
                    if (IsDimensionSupported(_dimensions.browserWidth) && IsMetricSupported(_metrics.visitors))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.VisitorsData;
                    }
                    break;
                case ReportType.BrowserHeight:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam browser height");
                    if (IsDimensionSupported(_dimensions.browserHeight) && IsMetricSupported(_metrics.visitors))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.VisitorsData;
                    }
                    break;
                case ReportType.SiteCatalystOperatingSystem:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam operating systems");
                    if (IsDimensionSupported(_dimensions.operatingSystem) && IsMetricSupported(_metrics.visitors) && IsMetricSupported(_metrics.pageviews))
                    {
                        _bDrillDownReport = false;
                        _bDrillDownDetail = false;
                        report = _dataManager.GetOperatingSystems(provider, startDate, endDate, criteria);
                        _reportDisplayData = ReportDisplayData.PageVisitorsData;
                        this.ShowPieChart = false;
                    }
                    break;
                case ReportType.MonitorColorDepth:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam monitor color depths");
                    if (IsDimensionSupported(_dimensions.screenColors) && IsMetricSupported(_metrics.visitors))
                    {
                        _bDrillDownReport = false;
                        _bDrillDownDetail = false;
                        report = _dataManager.GetScreenColors(provider, startDate, endDate, criteria);
                        _reportDisplayData = ReportDisplayData.VisitorsData;
                        this.ShowPieChart = false;
                    }
                    break;
                case ReportType.MonitorResolution:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam monitor resolutions");
                    if (IsDimensionSupported(_dimensions.screenResolution) && IsMetricSupported(_metrics.visitors))
                    {
                        _bDrillDownReport = false;
                        _bDrillDownDetail = false;
                        report = _dataManager.GetScreenResolutions(provider, startDate, endDate, criteria);
                        _reportDisplayData = ReportDisplayData.VisitorsData;
                        this.ShowPieChart = false;
                    }
                    break;
                case ReportType.JavaEnabled:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam java");
                    if (IsDimensionSupported(_dimensions.javaEnabled) && IsMetricSupported(_metrics.visitors))
                    {
                        _bDrillDownReport = false;
                        _bDrillDownDetail = false;
                        report = _dataManager.GetJavaSupport(provider, startDate, endDate, criteria);
                        _reportDisplayData = ReportDisplayData.VisitorsData;
                        this.ShowPieChart = false;
                    }
                    break;
                case ReportType.JavaScriptEnabled:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam javaScript");
                    if (IsDimensionSupported(_dimensions.javaScriptEnabled) && IsMetricSupported(_metrics.visitors))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.VisitorsData;
                    }
                    break;
                case ReportType.JavaScriptVersion:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam javaScript version");
                    if (IsDimensionSupported(_dimensions.javaScriptVersion) && IsMetricSupported(_metrics.visitors))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.VisitorsData;
                    }
                    break;
                case ReportType.CookiesEnabled:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam cookies");
                    if (IsDimensionSupported(_dimensions.cookiesEnabled) && IsMetricSupported(_metrics.visitors))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.VisitorsData;
                    }
                    break;
                case ReportType.ConnectionTypes:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam connection types");
                    if (IsDimensionSupported(_dimensions.connectionSpeed) && IsMetricSupported(_metrics.visitors))
                    {
                        _bDrillDownReport = false;
                        _bDrillDownDetail = false;
                        report = _dataManager.GetConnectionSpeeds(provider, startDate, endDate, criteria);
                        _reportDisplayData = ReportDisplayData.VisitorsData;
                        this.ShowPieChart = false;
                    }
                    break;
                case ReportType.VisitorUSState:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam visitor state");
                    if (IsDimensionSupported(_dimensions.state) && IsMetricSupported(_metrics.pageviews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.SiteContentData;
                    }
                    break;
                case ReportType.VisitorZipCode:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = _columnName = GetMessage("sam visitor zip/postal code");
                    if (IsDimensionSupported(_dimensions.zip) && IsMetricSupported(_metrics.pageviews))
                    {
                        bGeneric = true;
                        _reportDisplayData = ReportDisplayData.SiteContentData;
                    }
                    break;
                #endregion
                #region WebTrends Reports
                case ReportType.WebTrendsReport:
                    litCssTweaks.Text = cssTweak;
                    criteria.ReportGUID = this.ReportGUID;
                    bGeneric = true;
                    _reportDisplayData = ReportDisplayData.DynamicData;
                    break;
                #endregion
                case ReportType.CmsSearchTerms:
                    litCssTweaks.Text = cssTweak;
                    ReportTitle = _reportTypeName = GetMessage("lbl cms search terms");
                    reportSummary = GetMessage("lbl searches used search terms");
                    _columnName = GetMessage("lbl phrase");
                    _bDrillDownDetail = false; // not implemented
                    UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.PageViews, allowSorting);
                    report = _dataManager.GetCmsSearchTerms(startDate, endDate);
                    break;
                default:
                    ReportTitle = _reportTypeName = _reportType.ToString();
                    break;
            }
            if (bGeneric)
            {
                _bDrillDownReport = false;
                _bDrillDownDetail = false;
                reportSummary = "";
                _defaultView = DisplayView.Table;
                //UpdateCriteriaOrderBy(criteria, AnalyticsSortableField.Exits, allowSorting);
                report = _dataManager.GetReportRanked(provider, _reportType, startDate, endDate, criteria);
                reports = new List<AnalyticsReportData>();
                reports.Add(report);
                ltrVisualizationView.Text = GetMessage("generic view");
            }
        }
        catch (Exception ex)
        {
            if (ex.Message.Contains("Username and/or password not set"))
                litErrorMessage.Text = this.GetMessage("err google overview");
            else if (ex.Message.Contains("Web Services Username and/or Secret not set"))
                litErrorMessage.Text = this.GetMessage("err analytic report");
            else
                litErrorMessage.Text = ex.Message;
            ErrorPanel.Visible = true;
        }

        if (null == reports || 0 == reports.Count)
        {
            if (string.IsNullOrEmpty(provider))
            {
                this.htmReportSummary.InnerText = GetMessage("msg no data report");
            }
            else
            {
                string pName = provider.Substring(0, 1).ToUpper() + provider.Substring(1, provider.Length - 1);
                this.htmReportSummary.InnerText = String.Format(GetMessage("msg report not supported"), ReportTitle, pName); //"{0} report is not supported by {1}"
            }
        }
        else if (0 == reports[0].TotalResults)
        {
            this.htmReportSummary.InnerText = GetMessage("msg no data report");
            if (reports[0].ReportDataSet != null && !string.IsNullOrEmpty(reports[0].ReportDataSet.Title))
            {
                ReportTitle = _reportTypeName = reports[0].ReportDataSet.Title;
            }
            if (!string.IsNullOrEmpty(provider))
            {
                ReportTitle = _dataManager.GetProviderSiteURL(provider) + " " + ReportTitle;
            }
        }
        else
        {
            if (reports[0].ReportDataSet != null)
            {
                if (reports[0].ReportDataSet.HasDrillDownData != null)
                {
                    _bDrillDownReport = (String.IsNullOrEmpty(_forValue) ? reports[0].ReportDataSet.HasDrillDownData : false);
                }
                if (!string.IsNullOrEmpty(reports[0].ReportDataSet.Title))
                {
                    ReportTitle = _reportTypeName = reports[0].ReportDataSet.Title;
                }
            }
            if (!string.IsNullOrEmpty(provider))
            {
                ReportTitle = _dataManager.GetProviderSiteURL(provider) + " " + ReportTitle;
            }
            htmReportTitle.InnerText = ReportTitle;

            RenderDateRange();

            if (!String.IsNullOrEmpty(reportSubtitle))
            {
                htmReportSubtitle.InnerText = reportSubtitle;
                htmReportSubtitle.Visible = true;
            }

            if (DisplayView.Detail == this.View)
            {
                switch (_reportDisplayData)
                {
                    case ReportDisplayData.SiteData:
                    case ReportDisplayData.SiteMetricData:
                    case ReportDisplayData.SiteContentData:
                    case ReportDisplayData.InstancesData:
                    case ReportDisplayData.MobileData:
                    case ReportDisplayData.ReloadData:
                    case ReportDisplayData.VisitsData:
                    case ReportDisplayData.VisitorsData:
                    case ReportDisplayData.PageVisitsData:
                    case ReportDisplayData.PageVisitorsData:
                    case ReportDisplayData.DynamicData:
                        this.htmReportSummary.Visible = false;
                        break;
                    case ReportDisplayData.PageData:
                    case ReportDisplayData.LandingPageData:
                    case ReportDisplayData.ExitPageData:
                        string total = (reports[0].TotalPageViews > 0) ? reports[0].TotalPageViews.ToString() : "";
                        this.htmReportSummary.InnerText = String.Format(GetMessage("lbl page viewed times"), total);
                        break;
                    default:
                        throw new ArgumentOutOfRangeException("_reportDisplayData", "Unknown ReportDisplayData: " + _reportDisplayData);
                }
            }
            else
            {
                string total = "";
                switch (_reportDisplayData)
                {
                    case ReportDisplayData.SiteData:
                    case ReportDisplayData.SiteMetricData:
                        total = (reports[0].TotalVisits > 0) ? reports[0].TotalVisits.ToString() : "";
                        if (this.ProviderSegments != null && this.ProviderSegments.Count > 1)
                        {
                            this.htmReportSummary.InnerText = String.Format(reportSegSummary, total, reports[0].TotalResults, reports[0].Segment.Name);
                        }
                        else
                        {
                            this.htmReportSummary.InnerText = String.Format(reportSummary, total, reports[0].TotalResults);
                        }
                        break;
                    case ReportDisplayData.SiteContentData:
                    case ReportDisplayData.InstancesData:
                    case ReportDisplayData.PageData:
                        total = (reports[0].TotalResults > 0) ? reports[0].TotalResults.ToString() : "";
                        if (total.Length > 0)
                        {
                            if (this.ProviderSegments != null && this.ProviderSegments.Count > 1)
                            {
                                this.htmReportSummary.InnerText = String.Format(reportSegSummary, total, reports[0].TotalPageViews, reports[0].Segment.Name);
                            }
                            else
                            {
                                this.htmReportSummary.InnerText = String.Format(reportSummary, total, reports[0].TotalPageViews);
                            }
                        }
                        else
                        {
                            this.htmReportSummary.InnerText = String.Format(reportSummaryShort, reports[0].TotalPageViews);
                        }
                        break;
                    case ReportDisplayData.LandingPageData:
                        total = (reports[0].TotalEntrances > 0) ? reports[0].TotalEntrances.ToString() : "";
                        if (this.ProviderSegments != null && this.ProviderSegments.Count > 1)
                        {
                            this.htmReportSummary.InnerText = String.Format(reportSegSummary, total, reports[0].TotalResults, reports[0].Segment.Name);
                        }
                        else
                        {
                            this.htmReportSummary.InnerText = String.Format(reportSummary, total, reports[0].TotalResults);
                        }
                        break;
                    case ReportDisplayData.ExitPageData:
                        total = (reports[0].TotalExits > 0) ? reports[0].TotalExits.ToString() : "";
                        if (this.ProviderSegments != null && this.ProviderSegments.Count > 1)
                        {
                            this.htmReportSummary.InnerText = String.Format(reportSegSummary, total, reports[0].TotalResults, reports[0].Segment.Name);
                        }
                        else
                        {
                            this.htmReportSummary.InnerText = String.Format(reportSummary, total, reports[0].TotalResults);
                        }
                        break;
                    case ReportDisplayData.MobileData:
                    case ReportDisplayData.ReloadData:
                    case ReportDisplayData.VisitorsData:
                    case ReportDisplayData.VisitsData:
                    case ReportDisplayData.PageVisitorsData:
                    case ReportDisplayData.PageVisitsData:
                    case ReportDisplayData.DynamicData:
                        this.htmReportSummary.InnerText = "";
                        break;
                    default:
                        throw new ArgumentOutOfRangeException("_reportDisplayData", "Unknown ReportDisplayData: " + _reportDisplayData);
                }
            }
        }
        _reportGenerated = true;
        return reports;
    }
コード例 #59
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];
                }
            }
        }
コード例 #60
0
 public NodeConstant(string name, Stack <Node> graphstack, NodeEvaluate evaluate, IDimensions dims)
     : base(name, graphstack, evaluate, dims)
 {
     values = new Dictionary <Node, double>();
 }