示例#1
0
        /// <summary>
        /// Populate the dry matter pool
        /// </summary>
        /// <param name="Model"></param>
        /// <param name="iCode"></param>
        /// <param name="bUseYoung"></param>
        /// <param name="bUseAll"></param>
        /// <param name="bUseTag"></param>
        /// <param name="aValue"></param>
        /// <returns></returns>
        public static bool PopulateDMPoolValue(TStockList Model, int iCode, bool bUseYoung, bool bUseAll, bool bUseTag, ref TDMPoolHead[] aValue)
        {
            int iNoPasses;
            TAnimalGroup aGroup;
            GrazType.DM_Pool Pool = new GrazType.DM_Pool();
            GrazType.DM_Pool TotalPool = new GrazType.DM_Pool();
            int iDenom;
            int iPass, Idx;

            bool Result = true;
            for (int i = 0; i < aValue.Length; i++)
                aValue[i] = new TDMPoolHead();

            if (bUseTag)
                iNoPasses = aValue.Length;
            else
                iNoPasses = 1;

            for (iPass = 1; iPass <= iNoPasses; iPass++)
            {
                GrazType.ZeroDMPool(ref TotalPool);
                iDenom = 0;

                for (Idx = 1; Idx <= Model.Count(); Idx++)
                {
                    if (!bUseTag || (Model.getTag(Idx) == iPass))
                    {
                        if (!bUseYoung)
                            aGroup = Model.At(Idx);
                        else
                            aGroup = Model.At(Idx).Young;

                        GrazType.ZeroDMPool(ref Pool);
                        if (aGroup != null)
                        {
                            int N = (int)GrazType.TOMElement.N;
                            int P = (int)GrazType.TOMElement.P;
                            int S = (int)GrazType.TOMElement.S;

                            switch (iCode)
                            {
                                case StockProps.prpINTAKE:
                                    Pool.DM = aGroup.AnimalState.DM_Intake.Total;
                                    Pool.Nu[N] = aGroup.AnimalState.CP_Intake.Total / GrazType.N2Protein;
                                    Pool.Nu[P] = aGroup.AnimalState.Phos_Intake.Total;
                                    Pool.Nu[S] = aGroup.AnimalState.Sulf_Intake.Total;
                                    Pool.AshAlk = aGroup.AnimalState.PaddockIntake.AshAlkalinity * aGroup.AnimalState.PaddockIntake.Biomass
                                                   + aGroup.AnimalState.SuppIntake.AshAlkalinity * aGroup.AnimalState.SuppIntake.Biomass;
                                    break;
                                case StockProps.prpINTAKE_PAST:
                                    Pool.DM = aGroup.AnimalState.DM_Intake.Herbage;
                                    Pool.Nu[N] = aGroup.AnimalState.CP_Intake.Herbage / GrazType.N2Protein;
                                    Pool.Nu[P] = aGroup.AnimalState.Phos_Intake.Herbage;
                                    Pool.Nu[S] = aGroup.AnimalState.Sulf_Intake.Herbage;
                                    Pool.AshAlk = aGroup.AnimalState.PaddockIntake.AshAlkalinity * aGroup.AnimalState.PaddockIntake.Biomass;
                                    break;
                                case StockProps.prpINTAKE_SUPP:
                                    Pool.DM = aGroup.AnimalState.DM_Intake.Supp;
                                    Pool.Nu[N] = aGroup.AnimalState.CP_Intake.Supp / GrazType.N2Protein;
                                    Pool.Nu[P] = aGroup.AnimalState.Phos_Intake.Supp;
                                    Pool.Nu[S] = aGroup.AnimalState.Sulf_Intake.Supp;
                                    Pool.AshAlk = aGroup.AnimalState.SuppIntake.AshAlkalinity * aGroup.AnimalState.SuppIntake.Biomass;
                                    break;
                                case StockProps.prpFAECES:
                                    GrazType.AddDMPool(aGroup.AnimalState.OrgFaeces, Pool);
                                    GrazType.AddDMPool(aGroup.AnimalState.InOrgFaeces, Pool);
                                    break;
                                case StockProps.prpINORG_FAECES:
                                    GrazType.AddDMPool(aGroup.AnimalState.InOrgFaeces, Pool);
                                    break;
                                default:
                                    Result = false;
                                    break;
                            }
                        }

                        if (!bUseTag && !bUseAll)
                        {
                            DMPool2Value(Pool, aValue[Idx - 1], (iCode == StockProps.prpINORG_FAECES));
                        }
                        else if (aGroup != null)
                        {
                            GrazType.AddDMPool(GrazType.MultiplyDMPool(Pool, aGroup.NoAnimals), TotalPool);
                            iDenom = iDenom + aGroup.NoAnimals;
                        }
                    }
                } //_ loop over animal groups _

                if (bUseTag || bUseAll)
                {
                    if (iDenom > 0)
                        TotalPool = GrazType.PoolFraction(TotalPool, 1.0 / iDenom);
                    if (bUseAll)
                    {
                        DMPool2Value(TotalPool, aValue[0], (iCode == StockProps.prpINORG_FAECES));
                    }
                    else
                    {
                        DMPool2Value(TotalPool, aValue[iPass - 1], (iCode == StockProps.prpINORG_FAECES));
                    }
                }
            }
            return Result;
        }
示例#2
0
        /// <summary>
        /// Populate the numbers array for the type of output required
        /// </summary>
        /// <param name="Model"></param>
        /// <param name="code"></param>
        /// <param name="bUseYoung"></param>
        /// <param name="bUseAll"></param>
        /// <param name="bUseTag"></param>
        /// <param name="numbers"></param>
        /// <returns></returns>
        public static bool PopulateNumberValue(TStockList Model, CountType code, bool bUseYoung, bool bUseAll, bool bUseTag, ref int[] numbers)
        {
            int iNoPasses;
            TAnimalGroup aGroup;
            int iValue;
            int iTotal;
            int iPass, Idx;

            bool Result = true;
            Array.Clear(numbers, 0, numbers.Length);

            if (bUseTag)
                iNoPasses = numbers.Length;
            else
                iNoPasses = 1;

            for (iPass = 1; iPass <= iNoPasses; iPass++)
            {
                iTotal = 0;

                for (Idx = 1; Idx <= Model.Count(); Idx++)
                    if (!bUseTag || (Model.getTag(Idx) == iPass))
                    {
                        if (!bUseYoung)
                            aGroup = Model.At(Idx);
                        else
                            aGroup = Model.At(Idx).Young;

                        iValue = 0;
                        if (aGroup != null)
                        {
                            switch (code)
                            {
                                case CountType.eBoth:
                                    iValue = aGroup.NoAnimals;
                                    break;
                                case CountType.eFemale:
                                    iValue = aGroup.FemaleNo;
                                    break;
                                case CountType.eMale:
                                    iValue = aGroup.MaleNo;
                                    break;
                                default:
                                    Result = false;
                                    break;
                            }
                        }
                        if (!bUseTag && !bUseAll)
                            numbers[Idx - 1] = iValue;
                        else
                            iTotal = iTotal + iValue;
                    } // _ loop over animal groups 

                if (bUseAll)
                    numbers[0] = iTotal;
                else if (bUseTag)
                    numbers[iPass - 1] = iTotal;
            } //_ loop over passes _
            return Result;
        }
示例#3
0
        /// <summary>
        /// Fill the double[] with values from the model.
        /// </summary>
        /// <param name="Model"></param>
        /// <param name="varCode"></param>
        /// <param name="bUseYoung"></param>
        /// <param name="bUseAll"></param>
        /// <param name="bUseTag"></param>
        /// <param name="aValue"></param>
        /// <returns></returns>
        public static bool PopulateRealValue(TStockList Model, int varCode, bool bUseYoung, bool bUseAll, bool bUseTag, ref double[] aValue)
        {
            int iNoPasses;
            TAnimalGroup aGroup;
            double dValue;
            double dTotal;
            int iDenom;
            int iPass, Idx;

            bool Result = true;
            Array.Clear(aValue, 0, aValue.Length);

            if (bUseTag)
                iNoPasses = aValue.Length;
            else
                iNoPasses = 1;

            for (iPass = 1; iPass <= iNoPasses; iPass++)
            {
                dTotal = 0.0;
                iDenom = 0;

                for (Idx = 1; Idx <= Model.Count(); Idx++)
                {
                    if (!bUseTag || (Model.getTag(Idx) == iPass))
                    {
                        if (!bUseYoung)
                            aGroup = Model.At(Idx);
                        else
                            aGroup = Model.At(Idx).Young;

                        dValue = 0.0;
                        if (aGroup != null)
                        {
                            int N = (int)GrazType.TOMElement.N;
                            int P = (int)GrazType.TOMElement.P;
                            int S = (int)GrazType.TOMElement.S;
                            switch (varCode)
                            {
                                case StockProps.prpAGE: dValue = aGroup.AgeDays; break;
                                case StockProps.prpAGE_MONTHS: dValue = aGroup.AgeDays / MONTH2DAY; break;
                                case StockProps.prpLIVE_WT: dValue = aGroup.LiveWeight; break;
                                case StockProps.prpBASE_WT: dValue = aGroup.BaseWeight; break;
                                case StockProps.prpCOND_SCORE: dValue = aGroup.fConditionScore(TAnimalParamSet.TCond_System.csSYSTEM1_5); break;
                                case StockProps.prpMAX_PREV_WT: dValue = aGroup.MaxPrevWeight; break;
                                case StockProps.prpFLEECE_WT: dValue = aGroup.FleeceCutWeight; break;
                                case StockProps.prpCFLEECE_WT: dValue = aGroup.CleanFleeceWeight; break;
                                case StockProps.prpFIBRE_DIAM: dValue = aGroup.FibreDiam; break;
                                case StockProps.prpPREGNANT: dValue = aGroup.Pregnancy; break;
                                case StockProps.prpLACTATING: dValue = aGroup.Lactation; break;
                                case StockProps.prpNO_FOETUSES: dValue = aGroup.NoFoetuses; break;
                                case StockProps.prpNO_SUCKLING: dValue = aGroup.NoOffspring; break;
                                case StockProps.prpBIRTH_CS: dValue = aGroup.BirthCondition; break;
                                case StockProps.prpDSE: dValue = aGroup.DrySheepEquivs; break;
                                case StockProps.prpWT_CHANGE: dValue = aGroup.WeightChange; break;
                                case StockProps.prpME_INTAKE: dValue = aGroup.AnimalState.ME_Intake.Total; break;
                                case StockProps.prpCPI_INTAKE: dValue = aGroup.AnimalState.CP_Intake.Total; break;
                                case StockProps.prpCFLEECE_GROWTH: dValue = aGroup.CleanFleeceGrowth; break;
                                case StockProps.prpDAY_FIBRE_DIAM: dValue = aGroup.DayFibreDiam; break;
                                case StockProps.prpMILK_WT: dValue = aGroup.MilkYield; break;
                                case StockProps.prpMILK_ME: dValue = aGroup.MilkEnergy; break;
                                case StockProps.prpRETAINED_N:
                                    dValue = aGroup.AnimalState.CP_Intake.Total / GrazType.N2Protein - (aGroup.AnimalState.InOrgFaeces.Nu[N] + aGroup.AnimalState.OrgFaeces.Nu[N] + aGroup.AnimalState.Urine.Nu[N]);
                                    break;
                                case StockProps.prpRETAINED_P:
                                    dValue = aGroup.AnimalState.Phos_Intake.Total - (aGroup.AnimalState.InOrgFaeces.Nu[P] + aGroup.AnimalState.OrgFaeces.Nu[P] + aGroup.AnimalState.Urine.Nu[P]);
                                    break;
                                case StockProps.prpRETAINED_S:
                                    dValue = aGroup.AnimalState.Sulf_Intake.Total - (aGroup.AnimalState.InOrgFaeces.Nu[S] + aGroup.AnimalState.OrgFaeces.Nu[S] + aGroup.AnimalState.Urine.Nu[S]);
                                    break;
                                case StockProps.prpURINE_N: dValue = aGroup.AnimalState.Urine.Nu[N]; break;
                                case StockProps.prpURINE_P: dValue = aGroup.AnimalState.Urine.Nu[P]; break;
                                case StockProps.prpURINE_S: dValue = aGroup.AnimalState.Urine.Nu[S]; break;
                                case StockProps.prpCH4_OUTPUT:
                                    dValue = 0.001 * aGroup.MethaneWeight;         // Convert g/d to kg/d                  
                                    break;
                                case StockProps.prpRDPI: dValue = aGroup.AnimalState.RDP_Intake; break;
                                case StockProps.prpRDPR: dValue = aGroup.AnimalState.RDP_Reqd; break;
                                case StockProps.prpRDP_EFFECT: dValue = aGroup.AnimalState.RDP_IntakeEffect; break;
                                case StockProps.prpINTAKE_MOD: dValue = aGroup.IntakeModifier; break;
                                default: Result = false; break;
                            }
                        }

                        if (!bUseTag && !bUseAll)
                            aValue[Idx - 1] = dValue;
                        else if (varCode == StockProps.prpDSE)                                     // Sum DSE's; take a weighted average of 
                            dTotal = dTotal + dValue;                                              //   all other values                    
                        else if (aGroup != null)
                        {
                            dTotal = dTotal + aGroup.NoAnimals * dValue;
                            iDenom = iDenom + aGroup.NoAnimals;
                        }
                    } //_ loop over animal groups _
                }

                if ((varCode != StockProps.prpDSE) && (iDenom > 0))
                    dTotal = dTotal / iDenom;
                if (bUseAll)
                    aValue[0] = dTotal;
                else if (bUseTag)
                    aValue[iPass - 1] = dTotal;
            } //_ loop over passes _
            return Result;
        }
示例#4
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="Model"></param>
        /// <param name="Animal"></param>
        /// <param name="aValue"></param>
        public static void MakeCattleValue(TStockList Model, GrazType.AnimalType Animal, ref TCattleInit[] aValue)
        {
            TAnimalGroup aGroup;
            int iCount;
            int Idx, Jdx;

            iCount = 0;
            for (Idx = 1; Idx <= Model.Count(); Idx++)
                if (Model.At(Idx).Genotype.Animal == Animal)
                    iCount++;
            Array.Resize(ref aValue, iCount);

            Jdx = 0;
            for (Idx = 1; Idx <= Model.Count(); Idx++)
            {
                if (Model.At(Idx).Genotype.Animal == Animal)
                {
                    aGroup = Model.At(Idx);

                    aValue[Jdx] = new TCattleInit();

                    aValue[Jdx].genotype = aGroup.Genotype.sName;
                    aValue[Jdx].number = aGroup.NoAnimals;
                    aValue[Jdx].sex = Model.SexString(Idx, false);
                    aValue[Jdx].age = aGroup.AgeDays;
                    aValue[Jdx].weight = aGroup.LiveWeight;
                    aValue[Jdx].max_prev_wt = aGroup.MaxPrevWeight;
                    aValue[Jdx].pregnant = aGroup.Pregnancy;
                    aValue[Jdx].lactating = aGroup.Lactation;

                    /*if (Animal == GrazType.AnimalType.Sheep)
                    {
                        aValue[Jdx].fleece_wt = aGroup.FleeceCutWeight;
                        aValue[Jdx].fibre_diam = aGroup.FibreDiam;
                        aValue[Jdx].no_young = Math.Max(aGroup.NoFoetuses, aGroup.NoOffspring);
                    }
                    else*/
                    if (Animal == GrazType.AnimalType.Cattle)
                    {
                        aValue[Jdx].no_foetuses = aGroup.NoFoetuses;
                        aValue[Jdx].no_suckling = aGroup.NoOffspring;
                    }

                    if (aGroup.Lactation > 0)
                        aValue[Jdx].birth_cs = aGroup.BirthCondition;

                    if ((aGroup.Pregnancy > 0) || (aGroup.Young != null))
                    {
                        if (aGroup.MatedTo != null)
                            aValue[Jdx].mated_to = aGroup.MatedTo.sName;
                        else
                            aValue[Jdx].mated_to = "";
                    }
                    else
                        aValue[Jdx].mated_to = "";

                    if (aGroup.Young != null)
                    {
                        /*if (Animal == GrazType.AnimalType.Sheep)
                        {
                            aValue[Jdx].lamb_wt = aGroup.Young.LiveWeight;
                            aValue[Jdx].lamb_fleece_wt = aGroup.Young.FleeceCutWeight;
                        }
                        else*/
                        if (Animal == GrazType.AnimalType.Cattle)
                            aValue[Jdx].calf_wt = aGroup.Young.LiveWeight;

                        aValue[Jdx].paddock = Model.getInPadd(Idx);
                        aValue[Jdx].tag = Model.getTag(Idx);
                        aValue[Jdx].priority = Model.getPriority(Idx);
                    }
                }
                Jdx++;
            } // next animal
        }