public double CalcWaterLevel(int t, int j, TwoInOne o)
        {
            double l = 0;
            if(o.type == TwoInOne.Type.UseArray)
            {   //逐點輸入,採用Value欄位
                l = o.Array2D()[j, t];
            }
            else
            {   //均一水位,採用Value欄位直接回傳
                l = o.Value2D()[0, t];
            }

            return l;
        }
 public double CalcFlowQ(int t, int j, TwoInOne o)
 {
     double q = 0;
     double d0, d1, d;
     if(!o.check)
     {   //均一流量,採用Value欄位直接回傳
         d = Math.Sqrt(
             Math.Pow(inputGrid.inputCoor[0, 0].x - inputGrid.inputCoor[0, inputGrid.GetJ - 1].x, 2) +
             Math.Pow(inputGrid.inputCoor[0, 0].y - inputGrid.inputCoor[0, inputGrid.GetJ - 1].y, 2));
         q = o.Value2D()[0, t] / d;
     }
     else
     {   //逐點輸入,採用Value欄位 * Array欄位百分比,取前後位中位數。
         d0 = (j == 0) ? 0 : Math.Sqrt(
             Math.Pow(inputGrid.inputCoor[0, j].x - inputGrid.inputCoor[0, j - 1].x, 2) +
             Math.Pow(inputGrid.inputCoor[0, j].y - inputGrid.inputCoor[0, j - 1].y, 2));
         d1 = (j == inputGrid.GetJ - 1) ? 0 : Math.Sqrt(
             Math.Pow(inputGrid.inputCoor[0, j].x - inputGrid.inputCoor[0, j + 1].x, 2) +
             Math.Pow(inputGrid.inputCoor[0, j].y - inputGrid.inputCoor[0, j + 1].y, 2));
         d = d0 / 2 + d1 / 2;
         q = (o.Value2D()[0, t] * o.Array2D()[j, t] / 100) / d;
     }
     return q;
 }
        //結構物設置
        //public bool tBarCheck = false;
        //public bool bridgePierCheck = false;
        //public bool groundsillWorkCheck = false;
        //public bool sedimentationWeirCheck = false;
        //public int tBarNum = 0;
        //public int bridgePierNum = 0;
        //public int groundsillWorkNum = 0;
        //public int sedimentationWeirNum = 0;
        // private int _dryBedNum = 0;
        //private List<Point>[] _tBarPts = null;
        //private List<Point>[] _bridgePierPts = null;
        //private List<Point>[] _groundsillWorkPts = null;
        //private List<Point>[] _sedimentationWeirPts = null;
        //public List<Point>[] TBarSets
        //{
        //    get { return _tBarSets; }
        //    set { _tBarSets = (List<Point>[])value.Clone(); }
        //}
        //浸沒邊界資訊
        //private int _immersedBoundaryNum = 0;
        //private List<Point>[] _immersedBoundaryPts = null;
        //public bool sidewallBoundarySlip = false;      //4.1.3.1
        private void Initialization()
        {
            //模組特殊功能高程
            dimensionType = DimensionType.None;   //維度選擇
            modelingType = ModelingType.None;      //模組選擇

            //Special Functions
            //水理
            closeDiffusionEffectFunction = false;              //關閉移流擴散效應
            secondFlowEffectFunction = false;                  //二次流效應
            structureSetFunction = false;                      //結構物設置
            sideInOutFlowFunction = false;                     //側出入流
            waterHighSandContentEffectFunction = false;        //水理高含砂效應

            //動床
            bedrockFunction = false;                           //岩床
            quayStableAnalysisFunction = false;                //岩壁穩定分析
            movableBedHighSandContentEffectFunction = false;   //動床高含砂效應

            //全域參數
            inputGrid = null;
            importSource = ImportSource.None;
            coorType = TWD97;
            verticalLevelNumber = 19;      //0.1.1 垂向格網分層數目
            levelProportion = null;       //0.1.1.1 分層比例 陣列大小_verticalLevelNumber

            //水理參數
            flowType = FlowType.None;               //1.0 定/變量流
            //1.1 數值參數 =========================================
            //1.1.1 時間
            totalSimulationTime = 0;         //1.1.1.1 總模擬時間
            timeSpan2d = 0;                  //1.1.1.2 二維時間間距
            outputFrequency = 0;              //1.1.1.3 輸出頻率
            steppingTimesInVertVslcTime = 10;  //1.1.1.4 垂直方向計算時間步進次數
            //1.1.2 收斂條件
            waterModelingConvergenceCriteria2d = 0.0001;          //1.1.2.1 二維水理收斂標準
            waterModelingConvergenceCriteria3d = 0.0001;          //1.1.2.2 三維水理收斂標準
            waterModelingMaxIterationTimes = 10000;               //1.1.2.3 水理最大疊代次數

            //1.1.3 輸出控制
            //2D
            outputControlInitialBottomElevation = false;   //1.1.3 輸出控制 初始底床高程
            outputControlLevel = false;                    //1.1.3 輸出控制 水位
            outputControlDepth = false;                    //1.1.3 輸出控制 水深
            outputControlAverageDepthFlowRate = false;     //1.1.3 輸出控制 水深平均流速
            outputControlFlow = false;                     //1.1.3 輸出控制 流量
            outputControlBottomShearingStress = false;     //1.1.3 輸出控制 底床剪應力
            //3D
            outputControlVelocityInformation3D = false;    //1.1.3 輸出控制 三維流速資訊

            minWaterDeoth = 0.0001;                               //1.1.4 最小水深 單一數值 m 0.0001 實數(>0) 實數 8 格 (隱藏版功能)
            viscosityFactorAdditionInMainstream = 1;         //1.1.5 主流方向黏滯係數加成比例 單一數值 1 實數(>=0) 實數 8 格 (隱藏版功能)
            viscosityFactorAdditionInSideDirection = 1;      //1.1.6 側方向黏滯係數加成比例 單一數值 1 實數(>=0) 實數 8 格 (隱藏版功能)
            //1.2 物理參數 =========================================
            roughnessType = RoughnessType.None;        //1.2.1 糙度係數 二選一 整數 8 格
            manningN = new TwoInOne(TwoInOne.ValueType.Double, TwoInOne.ArrayType.TwoDim);                    //1.2.1.1 Manning n 二選一 -- 均一值
            chezy = new TwoInOne(TwoInOne.ValueType.Double, TwoInOne.ArrayType.TwoDim);                       //1.2.1.2 Chezy 二選一 -- 均一值
            roughnessHeightKs = new TwoInOne(TwoInOne.ValueType.Double, TwoInOne.ArrayType.TwoDim);           //1.2.1.3 粗糙高度 ks mm -- 均一值

            turbulenceViscosityType = TurbulenceViscosityType.None;    //1.2.2 紊流黏滯係數 四選一 整數 8 格
            //1.2.2.1 使用者輸入 模擬功能為二維或三維都可選擇此項輸入
            //1.2.2.1.1 紊流黏滯係數 Ns/m2 實數(>0) 實數 8 格
            tvInMainstreamDirection = 0;     //需確認
            tvInSideDirection = 0;           //需確認
            zeroEquationType = ZeroEquationType.Constant;  //1.2.2.2 零方程 五選一 總共 5 種選項
            //1.2.2.3 單方程 --
            //1.2.2.4 雙方程(k-ε) 三維 only,僅一項,不用下拉選單。

            //1.2.3 其他
            gravityConstant = 9.81;             //1.2.3.1 重力常數 單一數值 m/s2 9.81 實數 Free
            waterDensity = 1000;                //1.2.3.2 水密度 單一數值 kg/m3 1000 實數(>0) Free

            //1.3 二次流效應 二維 only
            curvatureRadiusType = 0;      //1.3.1 曲率半徑 是否自動計算
            curvatureRadius = null;      //1.3.1 曲率半徑 矩陣(I,J) m 0 實數 Free

            //1.4 結構物設置 四種結構物:丁壩、橋墩、固床工、攔河堰。
            tBarSet = false;                   //丁壩設置
            bridgePierSet = false;             //橋墩設置
            groundsillWorkSet = false;         //固床工設置
            sedimentationWeirSet = false;      //攔河堰設置
            //1.4.1 結構物數量
            tBarNumber = 0;               //丁壩數量
            bridgePierNumber = 0;         //橋墩數量
            groundsillWorkNumber = 0;     //固床工數量
            sedimentationWeirNumber = 0;  //攔河堰數量
            //1.4.1.1 格網位置
            tBarSets = null;                 //丁壩位置集合
            bridgePierSets = null;           //橋墩位置集合
            groundsillWorkSets = null;       //固床工位置集合
            sedimentationWeirSets = null;    //攔河堰位置集合

            //1.6 高含砂效應 供使用者輸入 6 個常數:α1、β1、c 1、α2、β2、c 2
            highSandEffectAlpha1 = 0;
            highSandEffectBeta1 = 0;
            highSandEffectC1 = 0;
            highSandEffectAlpha2 = 0;
            highSandEffectBeta2 = 0;
            highSandEffectC2 = 0;

            //動床參數
            //2.1 數值參數 =========================================
            waterTimeSpan = 0;                //2.1.1 時間間距
            waterOutputFrequency = 0;          //2.1.2 輸出頻率

            //2.1.3 輸出控制
            //2D
            outputControlBottomElevation = false;       //2.1.3 輸出控制 初始底床高程
            outputControlAverageDepthDensity = false;   //2.1.3 輸出控制 水深平均流速
            outputControlErosionDepth = false;          //2.1.3 沖淤深度

            //3D
            outputControlDensityInformation3D = false;   //2.1.3 輸出控制 三維流速資訊

            //2.1.4 選擇擴散公式
            diffusionFormulaUse = false;;                //2.1.4 擴散公式
            diffusionFormula = DiffusionFormulaType.None;   //2.1.4 擴散公式

            diffusionBonusProportionalInMainstream = 1.0;   //2.1.5 主流方向擴散係數加成比例單一數值 1 實數(>=0) 實數8 格三維 only (隱藏版功能)
            diffusionBonusProportionalInSideflow = 1.0;     //2.1.6 側方向擴散係數加成比例單一數值 1 實數(>=0) 實數8 格三維 only (隱藏版功能)
            diffusionBonusProportionalInSurface = 1.0;      //2.1.7 水面擴散係數加成比例單一數值 1 實數(>=0) 實數8 格三維 only (隱藏版功能)
            diffusionBonusProportionalInBottom = 1.0;       //2.1.8 底床擴散係數加成比例單一數值 1 實數(>=0) 實數8 格三維 only (隱藏版功能)

            //2.2 物理參數
            kinematicViscosityCoefficient = 1.12e-6;    //2.2.1 動力黏滯係數單一數值 秒 1.12e-6 實數(>=0) 實數16 格
            sedimentPoreRatio = 0.4;                //2.2.2 泥砂孔隙比單一數值 -- 0.4 實數(>=0) 實數8 格
            sedimentDensity = 2700;                  //2.2.3 泥砂密度單一數值 Kg/m3 2700 實數(>=0) 實數8 格
            sedimentParticlesNumber = 3;           //2.2.4 泥砂顆粒數目單一數值K 3 整數(>2) 最優先設定
            sedimentParticleSize = null;          //2.2.4.1 泥砂粒徑矩陣(K) m 實數(>0) 實數16 格矩陣(K)為泥砂顆粒數目
            //2.3 底床組成
            bottomLevelNumber = 6;                 //2.3.1 底床分層數目單一數值 整數(>0) a. 使用者輸入底床分層數目後
            bottomLevelArray = null;               //2.3.1.1 底床分層厚度矩陣(L) m 實數(>0) 矩陣(L)為底床分層數目
            sedimentCompositionArray = null;      //2.3.1.2 泥砂組成比例矩陣(K,L) 實數(>0) 矩陣(K,L)為(泥砂顆粒數目, 底床分層數目)

            shenCohesiveSediment = false;  //2.3.2 凝聚性沉滓option

            surfaceErosion = false;                 //2.3.2.1 表層沖刷 -- 實數(>0) 供者用者輸入係數及臨界剪應力(N/m2)兩個值
            surfaceErosionCoefficient = 0;          //2.3.2.1 表層沖刷 -- 實數(>0) 供者用者輸入係數及臨界剪應力(N/m2)兩個值
            surfaceErosionCriticalShearStress = 0;  //2.3.2.1 表層沖刷 -- 實數(>0) 供者用者輸入係數及臨界剪應力(N/m2)兩個值

            massiveErosion = false;                 //2.3.2.2 塊狀沖蝕 單一數值 N/m2。 -- 實數(>0) 供者用者輸入臨界剪應力(N/m2)
            massiveErosionCriticalShearStress = 0;  //2.3.2.2 塊狀沖蝕 單一數值 N/m2。 -- 實數(>0) 供者用者輸入臨界剪應力(N/m2)
            noErosionElevationUse = false;             //2.3.3 不可沖刷高程 二選一 m 實數 a. option 用 check box
            noErosionElevation = new TwoInOne(TwoInOne.ValueType.Double, TwoInOne.ArrayType.TwoDim);            //b. 0:均一值,逐點給:-1

            //2.4.2 高含砂輸砂公式 多選一 -- -- 整數 8 格 共 3 種選項
            sandTransportEquation = SandTransportEquationType.None;
            waterJettingAlpha = 0;    //2.5.1 水力沖刷 實數 供使用者輸入α及β兩個常數。
            waterJettingBeta = 0;     //2.5.1 水力沖刷 實數 供使用者輸入α及β兩個常數。

            sedimentErosion = false;                            //2.5.2 泥砂磨蝕
            sedimentErosionElasticModulusValue = 0;       //2.5.2.1 彈性模數 二選一 pa 實數(>=0) a. 0:均一值,逐點給:-1
            sedimentErosionElasticModulusArray = null;    //2.5.2.1 彈性模數 二選一 pa 實數(>=0) a. 若為逐點給,則參數形式為矩陣(I,J)
            sedimentErosionTensileStrengthValue = 0;      //2.5.2.2 張力強度 二選一 pa 實數(>=0) a. 0:均一值,逐點給:-1
            sedimentErosionTensileStrengthArray = null;   //2.5.2.2 張力強度 二選一 pa 實數(>=0) a. 若為逐點給,則參數形式為矩陣(I,J)

            bedrockElevation = false;           //2.5.3 岩床高程
            bedrockElevationValue = 0;;    //2.5.3 岩床高程 二選一 m 實數 a. 0:均一值,逐點給:-1。
            bedrockElevationArray = null; //2.5.3 岩床高程 二選一 m 實數 a. 為逐點給,則參數形式為矩陣(I,J)

            //2.6 岸壁穩定分析 option
            //2.6.1 分析位置
            positionAnalysis = false;   //2.6.1 分析位置
            positionAnalysisType = PositionAnalysisType.None;   //2.6.1 分析位置二選一 -- a. 僅供介面用,不用輸入到input 檔。此選項為提供全部模擬與局部模擬兩個選項
            localBlockNumber = 0;                        //2.6.1.1 數值格網數目的表格供使用者填入欲分析位置數目IB,其中IB 的數目不可超過格網數目I。
            localBlockArray = null;                         //2.6.1.1 局部區塊數目矩陣(2, IB) -- a. 矩陣(2, IB),1 代表左岸,2 代表右岸。僅為0、1 兩個數目字可供選擇,若1 為計算,若0 為不計算。

            //2.6.2 入滲效應
            infiltrationEffect = false;        //2.6.2 入滲效應 option
            infiltrationEffectTimeFormat = InfiltrationEffectTimeFormat.Minute;   //2.6.2.1 時間格式二選一 小時/分鐘,二選一。
            infiltrationEffectTimeSpacing = 0;                        //2.6.2.2 間距單一數值 實數(>0) 使用者自行輸入數值ex:1.5 小時or 90 分鐘
            rainfall = null;                                           //2.6.2.2.1 降雨量矩陣 mm 實數(>0) Free a. 矩陣大小需計算:首先將間距換為秒,然後“總模擬時間” (秒)除於間距(秒),即為矩陣大小

            //2.6.3 岸壁幾何條件
            quayGeometry = false;      //2.6.3 岸壁幾何條件
            soilStratificationNumber = 0;        //2.6.3.1 岸壁土壤分層數目單一數值 整數(>0) option
            layerThicknessArray = null;       //2.6.3.1.1 分層厚度矩陣(LBK)m 實數(>0) 矩陣(LBK)為岸壁土壤分層數目
            quayHeightArray = null;           //2.6.3.2 岸壁高度矩陣(2, IB) m 實數
            dikeToWharfLengthArray = null;    //2.6.3.3 堤防到岸壁的長度矩陣(2, IB)m 實數(>0)

            //2.6.4 岸壁土壤性質
            quaySoilProperties = false;   //2.6.4 岸壁土壤性質
            cohesion = 0;                         //2.6.4.1 凝聚力 二選一 pa 實數(>0) a. 0:均一值,逐點給:-1
            cohesionArray = null;                //2.6.4.1 凝聚力 若為逐點給,則參數形式為矩陣(2,IB,LBK)

            reposeAngle = 0;                      //2.6.4.2 安息角 二選一 deg 實數(>0) a. 0:均一值,逐點給:-1
            reposeAngleArray = null;             //2.6.4.2 安息角 若為逐點給,則參數形式為矩陣(2,IB,LBK)

            frictionAngle = 0;                    //2.6.4.3 內摩擦角 二選一 deg 實數(>0) a. 0:均一值,逐點給:-1
            frictionAngleArray = null;           //2.6.4.3 內摩擦角 若為逐點給,則參數形式為矩陣(2,IB,LBK)

            flowRateRatio = 0;                    //2.6.4.3 比流率 二選一 deg 實數(>0) a. 0:均一值,逐點給:-1
            flowRateRatioArray = null;          //2.6.4.3 比流率 若為逐點給,則參數形式為矩陣(2,IB,LBK)

            porosityRatio = 0;                    //2.6.4.5 孔隙率二選一 -- 實數(>0) a. 0:均一值,逐點給:-1
            porosityRatioArray = null;           //若為逐點給,則參數形式為矩陣(2,IB,LBK)

            soilProportion = 0;                  //2.6.4.6 土壤比重二選一 -- 實數(>0) a. 0:均一值,逐點給:-1
            soilProportionArray = null;         //若為逐點給,則參數形式為矩陣(2,IB,LBK)

            ShearStrengthAngle = 0;              //2.6.4.7 岸壁未飽和基值吸力造成剪力強度增加所對應角度 二選一 deg 實數(>0) a. 0:均一值,逐點給:-1
            ShearStrengthAngleArray = null;      //2.6.4.7 岸壁未飽和基值吸力造成剪力強度增加所對應角度 若為逐點給,則參數形式為矩陣(2,IB,LBK)

            //3. 初始條件
            //3.1 水理模組 =========================================
            depthAverageFlowSpeedU = new TwoInOne(TwoInOne.ValueType.Double, TwoInOne.ArrayType.TwoDim);
            depthAverageFlowSpeedV = new TwoInOne(TwoInOne.ValueType.Double, TwoInOne.ArrayType.TwoDim);
            waterLevel = new TwoInOne(TwoInOne.ValueType.Double, TwoInOne.ArrayType.TwoDim); ;      //3.1.4 水位 二選一 m 實數 實數 8 格a. 若為逐 點給,則參數形式為矩陣(I,J)
            verticalVelocitySlice = VerticalVelocitySliceType.None;         //3.1.4 垂向流速剖面二選一 -- -- 整數8 格a. 三維only b. 0:關;1:開

            //3.2 動床模組
            depthAverageConcentration = new TwoInOne(TwoInOne.ValueType.ThreeDim, TwoInOne.ArrayType.ThreeDim);      //3.2.1 水深平均濃度二選一 ppm -- 實數(>=0) 實數8 格a. 總共有K 個粒徑種類,每種粒徑都要輸入。
            verticalConcentrationSlice = VerticalConcentrationSliceType.None;         //3.2.2 垂向濃度剖面二選一 -- -- 整數8 格a. 三維only b. 0:關;1:開

            //4. 邊界條件
            //4.1 水理模組
            boundaryTimeNumber = 0;         //4.1.0 邊界時間數目
            boundaryTime = null;            //4.1.0 邊界時間

            //4.1.1 上游
            upFlowCondition = FlowConditionType.None;         //4.1.1.1 流況設定 二選一

            //4.1.1.1.1 超臨界流
            //boundaryConditionNumber = 0;                   //4.1.1.1.2.0 邊界條件數目 T 整數(>1) 定量流不輸入
            superMainFlowQuantity = new TwoInOne(TwoInOne.ValueType.TwoDim, TwoInOne.ArrayType.TwoDim);                 //4.1.1.1.2.1 流量 實數(>=0) 同 4.1.1.1.1.1
            superSideFlowQuantity = new TwoInOne(TwoInOne.ValueType.TwoDim, TwoInOne.ArrayType.TwoDim);                 //4.1.1.1.2.1 流量 實數(>=0) 同 4.1.1.1.1.1
            superWaterLevel = new TwoInOne(TwoInOne.ValueType.TwoDim, TwoInOne.ArrayType.TwoDim);                   //4.1.1.1.1.2 水位 m 實數

            //4.1.1.1.2 亞臨界流
            //subBoundaryConditionNumber = 0;                 //4.1.1.1.2.0 邊界條件數目 T 整數(>1) 定量流不輸入
            subMainFlowQuantity = new TwoInOne(TwoInOne.ValueType.TwoDim, TwoInOne.ArrayType.TwoDim);               //4.1.1.1.2.1 流量 實數(>=0) 同 4.1.1.1.1.1
            subSideFlowQuantity = new TwoInOne(TwoInOne.ValueType.TwoDim, TwoInOne.ArrayType.TwoDim);               //4.1.1.1.2.1 流量 實數(>=0) 同 4.1.1.1.1.1

            verticalVelocityType = VerticalVelocityType.Auto;       //4.1.1.2 垂向流速分布(3D) 矩陣(2,P) 實數(>=0)
            verticalVelocityDistributionArray = null;     //4.1.1.2 垂向流速分布(3D) 矩陣(2,P) 實數(>=0)

            //4.1.2 下游 二選一
            downFlowCondition = FlowConditionType.None;         //4.1.2 下游 二選一
            downSubWaterLevel = new TwoInOne(TwoInOne.ValueType.TwoDim, TwoInOne.ArrayType.TwoDim);                   //4.1.2.2.1 水位 實數 同 4.1.1.1.1.2,T 與前同(4.1.1.1.1.0 或4.1.1.1.2.0)

            //4.1.3 側壁
            sidewallBoundarySlip = false;               //4.1.3.1 側壁邊界滑移 -- 0 整數(>0) 整數 8 格 0:非滑移、1:滑移,check box

            //4.1.4 水面 三維 only。(”即時互動處”不放圖示)
            mainstreamWindShear = 0;              //4.1.4.1 主流方向風剪 單一數值 N/m2 0 實數 實數 8 格
            sideWindShear = 0;                    //4.1.4.2 側方向風剪 單一數值 N/m2 0 實數 實數 8 格
            coriolisForce = 0;                    //4.1.4.3 科氏力 單一數值 N/m2 0 實數 實數 8 格

            //4.1.5 底床 實數 三維 only。(”即時互動處”不放圖示)
            boundaryLayerThickness = 3;              //4.1.5.1 邊界層厚度 三選一 3 整數(>0) 整數 8 格 1、2、3,三維 only,下拉選單。
            seabedBoundarySlip = SeabedBoundarySlipType.NonSlip;   //4.1.5.2 底床邊界滑移 三選一 -- 0 整數(>0) 整數 8 格 a. 三維 only,下拉選單 b. 0:非滑移、1:滑移、2:壁函數

            //4.2 動床模組
            //4.2.1 上游
            //4.2.1.1 入流泥砂設定
            bottomBedLoadFluxType = BottomBedLoadFluxType.Auto; //4.2.1.1.1 底床載通量 實數(>=0)“模式自動計算”
            bottomBedLoadFluxArray = new TwoInOne(TwoInOne.ValueType.ThreeDim, TwoInOne.ArrayType.ThreeDim); ;            //4.2.1.1.1 底床載通量 實數(>=0)“自行輸入”,如果為“自行輸入”,則如圖4.2.1.1.1 所示
            suspendedLoadDepthAvgConcentration = new TwoInOne(TwoInOne.ValueType.ThreeDim, TwoInOne.ArrayType.ThreeDim);  //4.2.1.1.2 懸浮載水深平均濃度實數(>=0) 如圖 4.2.1.1.1 所示
            boundaryUpVerticalDistributionNum = 0;
            boundaryUpVerticalDistribution = new TwoInOne(TwoInOne.ValueType.Double, TwoInOne.ArrayType.TwoDim);    //4.2.1.1.3 垂向濃度分布(3D) 矩陣(2,PP) 均一值 實數(>=0) a. 可為均一值或自行輸入。

            //4.2.1.2 上游邊界底床
            upBoundaryElevationType = BottomBedLoadFluxType.Auto;   //4.2.1.2.1 可採用初始上游邊界底床高程或自行輸入
            upBoundaryElevationArray = null;              //4.2.1.2.1 高程矩陣(T,J) m 初始實數 可採用初始上游邊界底床高程或自行輸入,
            bottomBedParticleSizeRatio = null;            //4.2.1.2.2 底床粒徑比例實數(>=0) 如圖 4.2.1.1.3 所示

            //4.2.2 下游 圖5,“即時互動處”不放圖示
            movableBedDownType = BottomBedLoadFluxType.Auto;        //4.2.2.1 通量實數(>=0) 如圖 2.2.2.1 所示
            movableBedDownConcentration = null;           //4.2.2.2 濃度 實數(>=0) 如圖 2.2.2.1 所示

            boundaryDownVerticalDistributionNum = 0;
            boundaryDownVerticalDistribution = new TwoInOne(TwoInOne.ValueType.Double, TwoInOne.ArrayType.TwoDim);    //4.2.1.1.3 垂向濃度分布(3D) 矩陣(2,PP) 均一值 實數(>=0) a. 可為均一值或自行輸入。
            nearBedBoundaryType = NearBedBoundaryType.None;         //4.2.3 近底床濃度邊界二選一 實數 a. 三維only
            concentrationCalculation = ConcentrationCalculationType.None;   //4.2.3.1 濃度計算公式多選一 整數 8 格下拉式選單(總共2~3 種選項)
            inputConcentration = new TwoInOne(TwoInOne.ValueType.Double, TwoInOne.ArrayType.TwoDim);    //4.2.3.2 通量/給定濃度二選一 a. 先令使用者選擇是通量或者是給定濃
            stopFlah = false;
        }
            public TwoInOne(TwoInOne o)
            {
                type = o.type;
                valueType = o.valueType;
                arrayType = o.arrayType;
                check = o.check;
                if (o.dataArray == null)
                {
                    dataArray = null;
                }
                else
                {
                    if (arrayType == ArrayType.TwoDim)
                    {
                        dataArray = (double[,])(o.dataArray as double[,]).Clone();
                    }
                    else if (arrayType == ArrayType.ThreeDim)
                    {
                        dataArray = (double[, ,])(o.dataArray as double[, ,]).Clone();
                    }
                }

                if (o.dataValue == null)
                {
                    dataValue = null;
                }
                else
                {
                    if (valueType == ValueType.Double)
                    {
                        dataValue = (double[])(o.dataValue as double[]).Clone();
                    }
                    else if (valueType == ValueType.TwoDim)
                    {
                        dataValue = (double[,])(o.dataValue as double[,]).Clone();
                    }
                    else if (valueType == ValueType.ThreeDim)
                    {
                        dataValue = (double[, ,])(o.dataValue as double[, ,]).Clone();
                    }
                }
            }
        void DumpTwoInOne(TwoInOne o, ref StringBuilder sb, DumpTwoInOneType t = DumpTwoInOneType.Normal, bool noNewLine = false)
        {
            if(o == null || o.type == TwoInOne.Type.None)
            {
                if (t != DumpTwoInOneType.OnlyValueOrArray)
                {
                    sb.AppendFormat("{0,8}", (0).ToString());
                    if (!noNewLine)
                    {
                        sb.Append("\n");
                    }
                }
                if (t != DumpTwoInOneType.OnlyType)
                {
                    sb.AppendFormat("{0,8}\n", (0).ToString());
                }
                return;
            }
            if(o.type == TwoInOne.Type.UseValue)
            {
                if (t != DumpTwoInOneType.OnlyValueOrArray)
                {
                    sb.AppendFormat("{0,8}", (0).ToString());
                    if (!noNewLine)
                    {
                        sb.Append("\n");
                    }
                }

                if (t != DumpTwoInOneType.OnlyType)
                {
                    sb.AppendFormat("{0,8}\n", o.ValueDouble()[0].ToString());
                }
                return;
            }

            if (t != DumpTwoInOneType.OnlyValueOrArray)
            {
                sb.AppendFormat("{0,8}", (-1).ToString());
                if (!noNewLine)
                {
                    sb.Append("\n");
                }
            }
            if (t == DumpTwoInOneType.OnlyType)
            {
                return;
            }

            int count = 0;
            for (int j = 0; j < o.Array2D().GetLength(1); ++j)
            {
                for (int i = 0; i < o.Array2D().GetLength(0); ++i)
                {
                    if (count == 10)
                    {
                        sb.Append("\n");
                        count = 0;
                    }
                    sb.AppendFormat("{0,8}", o.Array2D()[i, j].ToString());
                    ++count;
                }
                sb.Append("\n");
                count = 0;
            }
        }