//厚土层智能分解(基底以下)
        private void get_intelligentlayering(ObservableCollection <Soilinformation> items)
        {
            decimal flag = 0.25m;//划分厚度 用户可自定义

            //循环直到没有厚度大于1m的土层
            for (int i = 0; i < soilinformationsItems.Count; i++)
            {
                if (Convert.ToDecimal(soilinformationsItems[i].SoilThickness) > flag)
                {
                    int     a = 0; //单层划分计数器
                    decimal b = Convert.ToDecimal(soilinformationsItems[i].SoilThickness);
                    do             //进行do循环,当b>=flag时跳出循环
                    {
                        b -= flag;
                        a += 1;
                    }while (b > flag);

                    Soilinformation intelligentlayer_1 = new Soilinformation
                    {
                        SoilThickness   = Convert.ToString(flag),
                        SoilUnitWeight  = soilinformationsItems[i].SoilUnitWeight,
                        Haswater        = soilinformationsItems[i].Haswater,
                        Voidratio0kPa   = soilinformationsItems[i].Voidratio0kPa,
                        Voidratio50kPa  = soilinformationsItems[i].Voidratio50kPa,
                        Voidratio100kPa = soilinformationsItems[i].Voidratio100kPa,
                        Voidratio200kPa = soilinformationsItems[i].Voidratio200kPa,
                        Voidratio300kPa = soilinformationsItems[i].Voidratio300kPa,
                        Voidratio400kPa = soilinformationsItems[i].Voidratio400kPa
                    };

                    Soilinformation intelligentlayer_2 = new Soilinformation
                    {
                        SoilThickness   = Convert.ToString(b),
                        SoilUnitWeight  = soilinformationsItems[i].SoilUnitWeight,
                        Haswater        = soilinformationsItems[i].Haswater,
                        Voidratio0kPa   = soilinformationsItems[i].Voidratio0kPa,
                        Voidratio50kPa  = soilinformationsItems[i].Voidratio50kPa,
                        Voidratio100kPa = soilinformationsItems[i].Voidratio100kPa,
                        Voidratio200kPa = soilinformationsItems[i].Voidratio200kPa,
                        Voidratio300kPa = soilinformationsItems[i].Voidratio300kPa,
                        Voidratio400kPa = soilinformationsItems[i].Voidratio400kPa
                    };
                    for (int c = 0; c < a; c++)
                    {
                        soilinformationsItems.Insert(i, intelligentlayer_1);
                    }
                    soilinformationsItems.Insert(i + a, intelligentlayer_2);
                    //移除被分解土层
                    soilinformationsItems.Remove(soilinformationsItems[i + a + 1]);
                }
            }
        }
        //添加空白行方法
        private void AddRow1()
        {
            Soilinformation soilinformation = new Soilinformation();

            soilinformation.SoilThickness   = "";
            soilinformation.SoilUnitWeight  = "";
            soilinformation.Haswater        = 0;//默认均不含地下水影响
            soilinformation.Voidratio0kPa   = "";
            soilinformation.Voidratio50kPa  = "";
            soilinformation.Voidratio100kPa = "";
            soilinformation.Voidratio200kPa = "";
            soilinformation.Voidratio300kPa = "";
            soilinformation.Voidratio400kPa = "";

            soilinformationsItems.Add(soilinformation);
        }
        //1st处理用户输入数据
        private void data_processing1st()
        {
            int           index      = get_baseindex(soilinformationsItems);     //基底所在土层
            double        distance   = get_distance(soilinformationsItems);      //基底距离下一土层厚度
            List <double> list_layer = get_soillayerlist(soilinformationsItems); //用户输入的土层信息表

            //根据埋深Depth重新划分土层
            //基底上部的一层土层
            Soilinformation upbase_soilinformation = new Soilinformation();

            upbase_soilinformation.SoilThickness   = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].SoilThickness) - distance);
            upbase_soilinformation.SoilUnitWeight  = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].SoilUnitWeight));
            upbase_soilinformation.Haswater        = 0;
            upbase_soilinformation.Voidratio0kPa   = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].Voidratio0kPa));
            upbase_soilinformation.Voidratio50kPa  = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].Voidratio50kPa));
            upbase_soilinformation.Voidratio100kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].Voidratio100kPa));
            upbase_soilinformation.Voidratio200kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].Voidratio200kPa));
            upbase_soilinformation.Voidratio300kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].Voidratio300kPa));
            upbase_soilinformation.Voidratio400kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].Voidratio400kPa));
            soilinformationsItems.Insert(index, upbase_soilinformation);//将上半层插入index处,被分解土层移到index+1位置

            //基础下部土层(为0时基底位于土层处)
            Soilinformation downbase_soilinformation = new Soilinformation();

            downbase_soilinformation.SoilThickness   = Convert.ToString(distance);
            downbase_soilinformation.SoilUnitWeight  = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].SoilUnitWeight));
            downbase_soilinformation.Haswater        = 0;
            downbase_soilinformation.Voidratio0kPa   = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].Voidratio0kPa));
            downbase_soilinformation.Voidratio50kPa  = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].Voidratio50kPa));
            downbase_soilinformation.Voidratio100kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].Voidratio100kPa));
            downbase_soilinformation.Voidratio200kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].Voidratio200kPa));
            downbase_soilinformation.Voidratio300kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].Voidratio300kPa));
            downbase_soilinformation.Voidratio400kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].Voidratio400kPa));

            soilinformationsItems.Insert(index + 1, downbase_soilinformation);         //将下半层插入index+1处,被分解土层移动到index+2位置
            soilinformationsItems.RemoveAt(index + 2);                                 //移除被分解的土层
            List <double> list_updownlayer = get_baselayerlist(soilinformationsItems); //对划分的第一个列表提取深度

            //移除厚度为0的土层
            for (int i = 0; i < soilinformationsItems.Count; i++)
            {
                if (Convert.ToDouble(soilinformationsItems[i].SoilThickness) == 0)
                {
                    soilinformationsItems.Remove(soilinformationsItems[i]);
                    i--;//很重要!!
                }
            }

            if (UndergroudWater < 0 || checkbox_undergroundwater.IsChecked == false)//土层完全不含水,不用再考虑含水层条件
            {
                //土壤的haswater全是0
                for (int i = 0; i < soilinformationsItems.Count; i++)
                {
                    soilinformationsItems[i].Haswater = 0;
                }
            }
            else//土层含水,需要加入含水层进行计算
            {
                int    index_water    = get_waterindex(soilinformationsItems);//地下水底面所在土层
                double distance_water = get_waterdistance(soilinformationsItems); //地下水底面距离下一层土的厚度

                if (UndergroudWater == 0)                                         //地下水底位于第一层土上部,下面所有土的haswater全是10
                {
                    for (int i = 0; i < soilinformationsItems.Count; i++)
                    {
                        soilinformationsItems[i].Haswater = 10;
                    }
                }
                else//地下水埋深大于0,需要重新加入含水层进行划分
                {
                    //重新定位与划分含水层
                    //含水层上部分haswater属性均设置为0
                    for (int i = 0; i < index_water; i++)
                    {
                        soilinformationsItems[i].Haswater = 0;
                    }
                    //含水层上部土层
                    Soilinformation upwater_soilinformation = new Soilinformation();
                    upwater_soilinformation.SoilThickness   = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].SoilThickness) - distance_water);
                    upwater_soilinformation.SoilUnitWeight  = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].SoilUnitWeight));
                    upwater_soilinformation.Haswater        = 0;
                    upwater_soilinformation.Voidratio0kPa   = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].Voidratio0kPa));
                    upwater_soilinformation.Voidratio50kPa  = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].Voidratio50kPa));
                    upwater_soilinformation.Voidratio100kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].Voidratio100kPa));
                    upwater_soilinformation.Voidratio200kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].Voidratio200kPa));
                    upwater_soilinformation.Voidratio300kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].Voidratio300kPa));
                    upwater_soilinformation.Voidratio400kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].Voidratio400kPa));
                    soilinformationsItems.Insert(index_water, upwater_soilinformation);//上半层插入index_water处,被分解土层移动到index+1位置

                    //含水层下部土层
                    Soilinformation downwater_soilinformation = new Soilinformation();
                    downwater_soilinformation.SoilThickness   = Convert.ToString(distance_water);
                    downwater_soilinformation.SoilUnitWeight  = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].SoilUnitWeight));
                    downwater_soilinformation.Haswater        = 10; //地下水位下方土层均为10
                    downwater_soilinformation.Voidratio0kPa   = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].Voidratio0kPa));
                    downwater_soilinformation.Voidratio50kPa  = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].Voidratio50kPa));
                    downwater_soilinformation.Voidratio100kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].Voidratio100kPa));
                    downwater_soilinformation.Voidratio200kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].Voidratio200kPa));
                    downwater_soilinformation.Voidratio300kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].Voidratio300kPa));
                    downwater_soilinformation.Voidratio400kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].Voidratio400kPa));
                    soilinformationsItems.Insert(index_water + 1, downwater_soilinformation); //下半层插入index_water+1处,被分解土层移动到index+2位置
                    soilinformationsItems.RemoveAt(index_water + 2);                          //移除被分解的含水土层

                    //地下水位线以下haswater属性均设置为10
                    for (int i = index_water + 1; i < soilinformationsItems.Count; i++)
                    {
                        soilinformationsItems[i].Haswater = 10;
                    }

                    //移除厚度为0的土层
                    for (int i = 0; i < soilinformationsItems.Count; i++)
                    {
                        if (Convert.ToDouble(soilinformationsItems[i].SoilThickness) == 0)
                        {
                            soilinformationsItems.Remove(soilinformationsItems[i]);
                            i--;//很重要!!
                        }
                    }
                }
            }
        }
        //添加书上例题
        private void Addtest()
        {
            //初始化界面
            foundation_width.Text  = Convert.ToString(4);
            foundation_length.Text = Convert.ToString(4);
            load.Text            = Convert.ToString(100);
            depth.Text           = Convert.ToString(2);
            undergroudwater.Text = Convert.ToString(0);

            Soilinformation a = new Soilinformation
            {
                SoilThickness   = "2",
                SoilUnitWeight  = "16",
                Haswater        = 0,
                Voidratio0kPa   = "0.8",
                Voidratio50kPa  = "0.78",
                Voidratio100kPa = "0.76",
                Voidratio200kPa = "0.74",
                Voidratio300kPa = "0.72",
                Voidratio400kPa = "0.7"
            };
            Soilinformation b = new Soilinformation
            {
                SoilThickness   = "5",
                SoilUnitWeight  = "16",
                Haswater        = 0,
                Voidratio0kPa   = "0.7",
                Voidratio50kPa  = "0.66",
                Voidratio100kPa = "0.62",
                Voidratio200kPa = "0.58",
                Voidratio300kPa = "0.54",
                Voidratio400kPa = "0.5"
            };

            //土样4-1
            Soilinformation c = new Soilinformation
            {
                SoilThickness   = "3",
                SoilUnitWeight  = "19.5",
                Haswater        = 0,
                Voidratio0kPa   = "1.13",
                Voidratio50kPa  = "0.8",
                Voidratio100kPa = "0.771",
                Voidratio200kPa = "0.728",
                Voidratio300kPa = "0.71",
                Voidratio400kPa = "0.708"
            };
            //土样4-2
            Soilinformation d = new Soilinformation
            {
                SoilThickness   = "6",
                SoilUnitWeight  = "20.1",
                Haswater        = 0,
                Voidratio0kPa   = "1.2",
                Voidratio50kPa  = "0.81",
                Voidratio100kPa = "0.771",
                Voidratio200kPa = "0.728",
                Voidratio300kPa = "0.71",
                Voidratio400kPa = "0.708"
            };


            soilinformationsItems.Add(c);
            soilinformationsItems.Add(d);
            soilinformationsItems.Add(b);
            soilinformationsItems.Add(a);
            soilinformationsItems.Add(c);
            soilinformationsItems.Add(a);
            soilinformationsItems.Add(c);
            soilinformationsItems.Add(d);
            soilinformationsItems.Add(b);
        }