破堤模式A

image

using System;
using System.Collections.Generic;
using System.Text;

namespace testone
{
    class KB
    {
        private int t, t0, Tf;
        private double hL;//堤坝高度(常态)
        public double hr;//堤坝内水高度(过程态)
         private double hLb;//堤坝溃堤最低处(终态)
         public double hb;//破堤瞬時間高程; (过程态)
         private double hp;//河道外水位;(过程态)

         private double h_low;//瞬時溢流較低水位高程; (过程态)
         private double h_high;//瞬時溢流較高水位高程; (过程态)
         private double gamma;//內外水位比值(过程态)
         private double alpha;//以決定河道內水是否溢流於堤防外(过程态)
        private double beta;
        private double b;//溃堤宽度(终态)
        private double bt;//最终溃堤宽度(过程态)
        private double dx;//沿主道方向的断面距离(常态)
        double q12 = 0;
        private void  getalpha()
        {
            alpha = -1;// (hr - hp) / (h_high - h_low);//当正常外流,应该为-1。
        }
        private void getgamma()
        {
            gamma = 1;// (hp - hb) / (hr - hb);//当正常外流,应该为-1。
        }
        private void getbeta()
        {
            if (gamma <= 0.67) beta = 1;
            else
                beta = 1 - 27.8 * (gamma - 0.67) * (gamma - 0.67) * (gamma - 0.67);//当正常外流,应该为-1。
        }
        private void getbt()
        {
            if (t <= t0 + Tf)
            {
                double x = t;
                double y = Tf;
                double tmp = (double)(x / y);
                bt = b *tmp ;
            }
            else bt = b;
        }
        private void gethb()
        {
            if (t <= t0 + Tf) hb = hL - (hL - hLb) * t / Tf;
            else hb = hLb;
        }
        #region
        private void gethr()
        { hr = h_high; }

        private void gethp()
        { hp = h_low; }

        #endregion
        //输入量包括hr,hp,
        private void getQ12()
        {
            double tmp = Math.Pow(System.Math.E, -(double)t / (Tf / 3));
            //this.h_high = hLb + (hL - hLb) * tmp;//符合某种规则减少(需要带入水网之维纳特方程求解。。。)
            double x = (h_high - hLb) * tmp; //h_high - hb;//必须大于0
            double y = 1.5;
            double z = 2.5;
            double tmp1 = System.Math.Pow(x,y);
            double tmp2 = System.Math.Pow(x,z);
            double tmp3 =  0.5 * bt * tmp1  + 0.64 * tmp2;

            q12 = alpha * beta *  tmp3  / dx;
        }

        /// <summary>
        /// 设置溃堤参数
        /// </summary>
        /// <param name="t0">破堤起始时间</param>
        /// <param name="Tf">破堤时长(小时)</param>
        /// <param name="h_high">渠道内水位初始高度</param>
        /// <param name="hLb">最后破堤水位高度</param>
        /// <param name="b">破堤宽度</param>
        /// <param name="dx">沿主道方向的断面距离</param>
        public void setparams(int t0, int Tf, double h_high, double hLb,double b, double dx)
        {
            getalpha();
            getbeta();
            this.b = b;
            this.t0 = t0;
            this.Tf = Tf;
            this.dx = dx;
            this.h_high = h_high;//水位
            this.hLb = hLb;
        }
        //需要输入的参数包括:堤防高度、溃堤处终态最低高度、起始时间、溃堤模拟时长、最後破堤水位高度、破堤宽度、沿主道方向的断面距离
        //理论上,参数有破堤之位置、河道水面高程(洪水位)、破堤寬度、破堤持續時間及最後破堤水位高度
        public double computer(int t)
        {

                this.t = t;
                getbt();
                gethb();
                this.getQ12();
                return q12;

        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值