/// <summary>
        /// Calculate how much to irrigate in a Date.
        /// Use both ways to calculate: by available water and by acumulated evapotranspirationCrop
        /// </summary>
        /// <param name="pName">new name</param>
        public Pair <double, Utils.WaterInputType> HowMuchToIrrigate(CropIrrigationWeather pCropIrrigationWeather)
        {
            Pair <double, Utils.WaterInputType> lReturn;
            bool   lIrrigationByEvapotranspiration;
            bool   lIrrigationByHydricBalance;
            double lPercentageAvailableWater;

            lReturn = new Pair <double, Utils.WaterInputType>();
            lIrrigationByEvapotranspiration = CalculusEvapotranspiration.IrrigateByEvapotranspiration(pCropIrrigationWeather);
            lIrrigationByHydricBalance      = CalculusAvailableWater.IrrigateByHydricBalance(pCropIrrigationWeather);
            lPercentageAvailableWater       = pCropIrrigationWeather.GetPercentageOfAvailableWaterTakingIntoAccointPermanentWiltingPoint();

            //If we need to irrigate by Evapotranspiraton, then Available water has to be lower than 60%
            if (lIrrigationByEvapotranspiration && lPercentageAvailableWater < InitialTables.PERCENTAGE_OF_AVAILABE_WATER_TO_IRRIGATE)
            {
                lReturn.First  = pCropIrrigationWeather.PredeterminatedIrrigationQuantity;
                lReturn.Second = Utils.WaterInputType.IrrigationByETCAcumulated;
            }
            else if (lIrrigationByHydricBalance)
            {
                lReturn.First  = pCropIrrigationWeather.PredeterminatedIrrigationQuantity;
                lReturn.Second = Utils.WaterInputType.IrrigationByHydricBalance;
            }

            return(lReturn);
        }
 /// <summary>
 /// Constructor of ClassTemplate
 /// </summary>
 public IrrigationCalculus()
 {
     this.calculusAvailableWater     = new CalculusAvailableWater();
     this.calculusEvapotranspiration = new CalculusEvapotranspiration();
 }