public static IOCrop Load(string filePath)
        {
            IOCrop crop = null;

            //check:
            if (filePath == string.Empty)
            {
                throw new Exception();
            }
            if (File.Exists(filePath) == false)
            {
                throw new FileNotFoundException();
            }

            //call appropriate loading function:
            string fileExtension = Path.GetExtension(filePath);

            if (fileExtension == ".CRO")
            {
                crop = LoadFromCropwatFile(filePath);
            }
            return(crop);
        }
        private static IOCrop LoadFromCropwatFile(string filePath)
        {
            IOCrop crop = new IOCrop();

            try
            {
                crop.FileSource = filePath;

                StreamReader strmReader = new StreamReader(filePath);
                crop.FileFormat = strmReader.ReadLine().Trim();

                crop.Name = strmReader.ReadLine().Trim();
                string line3 = strmReader.ReadLine().Trim();
                string line4 = strmReader.ReadLine().Trim();
                string line5 = strmReader.ReadLine().Trim();
                string line6 = strmReader.ReadLine().Trim();
                string line7 = strmReader.ReadLine().Trim();
                string line8 = strmReader.ReadLine().Trim();

                strmReader.Close();

                //Load Development satges in days from the file:
                string[] data = line3.Split(' ');
                crop.InitialStage     = Convert.ToDouble(data[0]);
                crop.DevelopmentStage = Convert.ToDouble(data[1]);
                crop.MidSeasonStage   = Convert.ToDouble(data[2]);
                crop.LateSeasonStage  = Convert.ToDouble(data[3]);

                //Load Kc values:
                data     = line4.Split(' ');
                crop.Kc1 = Convert.ToDouble(data[0]);
                crop.Kc2 = Convert.ToDouble(data[2]);
                crop.Kc3 = Convert.ToDouble(data[4]);

                //Load rooting depths:
                data = line5.Split(' ');
                crop.RoutingDepth1 = Convert.ToDouble(data[0]);
                crop.RoutingDepth2 = Convert.ToDouble(data[2]);

                //Load critical fractions:
                data = line6.Split(' ');
                crop.CriticalDepletion1 = Convert.ToDouble(data[0]);
                crop.CriticalDepletion2 = Convert.ToDouble(data[2]);
                crop.CriticalDepletion3 = Convert.ToDouble(data[4]);

                //Load yield responses:
                data = line7.Split(' ');
                crop.YieldResponse1 = Convert.ToDouble(data[0]);
                crop.YieldResponse2 = Convert.ToDouble(data[2]);
                crop.YieldResponse3 = Convert.ToDouble(data[4]);
                crop.YieldResponse4 = Convert.ToDouble(data[6]);
                crop.YieldResponse5 = Convert.ToDouble(data[8]);

                //Load crop height:
                crop.CropHeight = Convert.ToDouble(line8);
            }
            catch (Exception ex)
            {
                //crop=null;
                throw ex;
            }
            return(crop);
        }