public BurstController(IStratum stratum) { _stratum = stratum; }
public IStratum Clone() { IStratum s = new IStratum(); s.StratumObj = StratumObj; s.Name = Name; s.Top = Top; s.Thickness = Thickness; s.Gama = Gama; s.K0 = K0; s.c = c; s.fai = fai; return s; }
// Ground pressure of a stratum over a given point at z. // Water table: w // public static double GroundPressure(IStratum s, double w, double z, ref string str) { if (s.Top <= z) return 0; // thickness above the given point z double t = s.Thickness; if (s.Top - t < z) t = s.Top - z; // hi: thickness above the ground water table // hj: thickness below the ground water table double Hi, Hj, p; double Gama = s.Gama; if (Gama == 0) Gama = 18.0; if (s.Top - t > w) { Hi = t; Hj = 0; p = Hi * Gama; str += string.Format("{0}:γHi={1:0.0}*{2:0.00}={3:0.00} kPa\n", s.Name, Gama, Hi, p); } else if (s.Top < w) { Hi = 0; Hj = t; p = Hj * (Gama - 10.0); str += string.Format("{0}:γ'Hj=({1:0.0}-γw)*{2:0.00}={3:0.00} kPa\n", s.Name, Gama, Hj, p); } else { Hi = s.Top - w; Hj = t - Hi; p = Hi * Gama + Hj * (Gama - 10.0); str += string.Format("{0}:γHi+γ'Hj={1:0.0}*{2:0.00}+({3:0.0}-γw)*{4:0.00}" + "={5:0.00} kPa\n", s.Name, Gama, Hi, Gama, Hj, p); } return p; }
// Soil pressure at a given point at z using Terzaghi's formula // Tunnel top elevation: z // Water table: w // Radius of tunnel: R // Surcharge: P0 // public static double TerzaghiPressure(IStratum s, double w, double z, double R, double P0, ref string str) { double H = s.Top - z; double Hw = w - z; double B1 = R / Math.Tan(Math.PI / 8.0 + s.fai * Math.PI / 180.0 / 4.0); str += string.Format("B1=R/tan(π/8+φ/4)={0:0.00}/tan(22.5°+{1:0.00}°/4)={2:0.00} m\n", R, s.fai, B1); double K0TanFai = s.K0 * Math.Tan(s.fai * Math.PI / 180.0); str += string.Format("K0*Tan(φ)={0:0.00}*Tan({1:0.00}°)={2:0.00}\n", s.K0, s.fai, K0TanFai); double K0TanFaiHB1 = K0TanFai * H / B1; str += string.Format("K0*Tan(φ)*H/B1={0:0.00}*{1:0.00}/{2:0.00}={3:0.00}\n", K0TanFai, H, B1, K0TanFaiHB1); double h0 = (B1 - s.c / s.Gama) * (1 - Math.Exp(-1.0 * K0TanFaiHB1)) / K0TanFai + P0 * Math.Exp(-1.0 * K0TanFaiHB1) / s.Gama; str += string.Format("h0=(B1-c/γ)*(1-exp(-K0*Tan(φ)*H/B1))/K0*Tan(φ)+P0*exp(-K0*Tan(φ)*H/B1)/γ" + "=({0:0.00}-{1:0.00}/{2:0.00})*(1-exp(-{3:0.00}))/{4:0.00}+{5:0.00}*exp(-{6:0.00})/{7:0.00}" + "={8:0.00} m\n", B1, s.c, s.Gama, K0TanFaiHB1, K0TanFai, P0, K0TanFaiHB1, s.Gama, h0); double p = 0; if (Hw <= 0) { p = s.Gama * h0; str += string.Format("Hw={0:0.00}<=0, Pe1=γ*h0={1:0.00}*{2:0.00}={3:0.00} kPa\n", Hw, s.Gama, h0, p); } else if (h0 <= Hw) { p = (s.Gama - 10.0) * h0; str += string.Format("h0={0:0.00} <= Hw={1:0.00}, Pe1=γ'*h0={2:0.00-γw}*{3:0.00}={4:0.00} kPa\n", h0, Hw, s.Gama, h0, p); } else { p = s.Gama * (h0 - Hw) + (s.Gama - 10.0) * Hw; str += string.Format("h0={0:0.00}>Hw={1:0.00}, ", h0, Hw); str += string.Format("Pe1=γ*(h0-Hw)+γ'*Hw=" + "{0:0.00}*({1:0.00}-{2:0.00})+({3:0.00}-γw)*{4:0.00}={5:0.00} kPa\n", s.Gama, h0, Hw, s.Gama, Hw, p); } return p; }
// Compute strata average property: Gama, cu // public static IStratum AverageProperty(List<IStratum> strata) { if (strata == null || strata.Count == 0) return null; IStratum r = new IStratum(); r.Top = strata[0].Top; r.Name = "Average"; double d1 = 0, d2 = 0, d3 = 0, d4 = 0; double t1 = 0, t2 = 0, t3 = 0, t4 = 0; double thickness = 0; foreach (IStratum s in strata) { thickness += s.Thickness; if (s.Gama != 0) { t1 += s.Thickness; d1 += s.Gama * s.Thickness; } if (s.c != 0) { t2 += s.Thickness; d2 += s.c * s.Thickness; } if (s.fai != 0) { t3 += s.Thickness; d3 += s.fai * s.Thickness; } if (s.K0 != 0) { t4 += s.Thickness; d4 += s.K0 * s.Thickness; } } d1 /= t1; d2 /= t2; d3 /= t3; d4 /= t4; r.Gama = d1; r.c = d2; r.fai = d3; r.K0 = d4; r.Thickness = thickness; return r; }