//---------------------------------------------------------------------------
// Выполнить подбор сечения для колонн постоянного сечения
void __fastcall TChosenKolonnaForm::ChoiseKolonna_Alg0(int local_sect, double mu_x, double mu_y, double l_kol, double Nx, double Qy, double Mz, TObject *Sender) {
     GEOM_PARAM_SECT param_sect;
     double kR;
     double sig_ext, sig_int;
     double lambda_w, lambda_x, lambda_;
     double fi_e, h_opt, hw, tw, tf, bf, mult_ix, ix;
     int i;
     double gamma_c;
     double e_, lx_ef, ly_ef, Bx_, By_;
     double dzeta, omega, Const0, Const1, lambda_f;
     double lambda_y, Rel_u, ksi_, dzeta_sk, u_, uef, Cx_, Delta, Delta_e;
     double Ar_, Rel_A, eta, omega_ef, k_;
     double m_exc, lam, Add_koef, Up_lambda_w, ss;
     int n_loop;





     switch (local_sect) {
      case KOLONNA_LEFT:
      case KOLONNA_RIGHT:
        gamma_c = Param_chosen_sect.gamma_c_kol_outer;
      break;
      default:
        gamma_c = Param_chosen_sect.gamma_c_kol_interior;
     }

     /*   тест для гибкой стенки
     mu_x = 2.0;
     mu_y = 0.8;
     l_kol =8600;
     Nx = 259294;
     Mz = 71761000;
     gamma_c =0.95;
     */
     /*  тест для устойчивой стенки
     mu_x = 2.0;
     mu_y = 0.4615;
     l_kol =7800;
     Nx = 930000;
     Mz = 319000000;
     gamma_c =1.0;
     Ry = 210;
     */
     Mz =ABS(Mz);
     Nx=ABS(Nx);
     // 1. Предварительный расчет
     // Эксцентриситет
     e_ = Mz/Nx;
     // Расчетные длины
     lx_ef = mu_x*l_kol;
     ly_ef = mu_y*l_kol;

     char stroka[240];
     InfMessage("Alg_Parus-----------------");
     sprintf(stroka, "lx_ef=%10.2f, ly_ef=%10.2f, e_=%10.2f", lx_ef, ly_ef, e_);
     InfMessage((AnsiString)stroka);

     n_loop =0;
loop0:
     // Вычисление характерных параметров - перенесено за метку, т. Ry может уточняться (пока не сделано)
     kR = sqrt(Ey/Ry);

     Bx_ = Nx*Ey/(Ry*gamma_c*Ry*lx_ef*lx_ef);

     dzeta = lx_ef/(2*ly_ef);

     omega = 1.3*e_* kR/lx_ef;

     By_ = Nx*Ey/(Ry*gamma_c*Ry*ly_ef*ly_ef);

     Const0 = 5.0*(1+0.26*dzeta*dzeta)*(1+0.26*dzeta*dzeta)*sqrt(Ry/Ey)/(1+1.8*omega);
     Const1 = (1+0.26*dzeta*dzeta)*(1+0.26*dzeta*dzeta)*sqrt(Ry/Ey)/(1+2.9*omega);

     if (By_ > Const0) lambda_ = 1.0;
     if (By_ <= Const0 && By_ >= Const1) lambda_ = 2.0;
     if (By_ < Const1) lambda_ = 3.0;

     if (Param_chosen_sect.ind_gib)  // гибкая стенка
       lambda_y = 1.5*lambda_;
     else
       lambda_y = lambda_;
     // Конец вычисления характерных параметров
loop:
     // Гибкость поясов
     lam = MAX(0.8, lambda_);
     lam = MIN(4.0, lambda_);
     lambda_f = 2.0*(0.36 + 0.1*lam)*kR;


     sprintf(stroka, "lambda_f=%10.2f, lambda_y=%10.2f", lambda_f, lambda_y);
     InfMessage((AnsiString)stroka);

     if (Param_chosen_sect.ind_gib) { // гибкая стенка
        Add_koef = 1.7;
        Up_lambda_w = 4.6*kR;
        if (lambda_<2.0)
          lambda_w = Add_koef*(1.3 +0.15*lambda_*lambda_)*kR;
        else
          lambda_w = Add_koef*(1.2 +0.35*lambda_)*kR;
        lambda_w = MIN(Up_lambda_w, lambda_w);
        //lambda_y = 1.5*lambda_;
        //lambda_y = lambda_;
        Rel_u = 1.7*kR/lambda_w;
        ksi_ = 3.0*Rel_u*(1 - Rel_u + Rel_u*Rel_u/3);
        ss = sqrt(2.0*ksi_*lambda_f*pow(lx_ef*lambda_y/(ly_ef*lambda_),2)/(9.0*lambda_w) + 1);
        dzeta_sk = sqrt((3.0 * lambda_w/(ksi_*lambda_f))*
                   (ss - 1));
        u_ = lambda_f*dzeta_sk*dzeta_sk/(2*lambda_w);
        uef = u_ * Rel_u;
     }
     else {
        if (lambda_<2.0)
          lambda_w = (1.3 +0.15*lambda_*lambda_)*kR;
        else
          //lambda_w = (1.2 +0.35*lambda_)*kR;
          lambda_w = (MIN(2.3, (1.2 +0.35*lambda_)))*kR;
        //lambda_y = lambda_;
        ksi_ = 1;
        ss = sqrt(2.0*ksi_*lambda_f*pow(lx_ef*lambda_y/(ly_ef*lambda_),2)/(9.0*lambda_w) + 1);
        dzeta_sk = sqrt((3.0 * lambda_w/(ksi_*lambda_f))*
                   (ss - 1));
        u_ = lambda_f*dzeta_sk*dzeta_sk/(2*lambda_w);
        uef = u_;
     }

     sprintf(stroka, "lambda_w=%10.2f, u_=%10.2f, uef=%10.2f", lambda_w, u_, uef);
     InfMessage((AnsiString)stroka);

     Cx_ = u_*(3.0+ksi_*u_)*lambda_w/(12.0*(1+uef)*(1+uef));
     Delta = Bx_*Cx_;
     omega  = sqrt(3.0*(1+uef)/(3 + ksi_*u_))*e_*kR/lx_ef;
     Delta_e = (1+3*pow(omega,0.75)/(4*pow(Delta,0.3333)))*Delta;
      // Уточнение Delta_e
     Delta_e = (1+omega*Delta_e/(pow(Delta_e+0.04, 1.5)))*Delta;
     Delta_e = MAX(0.03, Delta_e);

     lambda_x = 1/(sqrt(Delta_e+0.04));
     Ar_ = Nx *(1+omega*Delta_e/(pow(Delta_e+0.04, 1.5)))*
           (1 + 0.04/Delta_e)/(Ry*gamma_c);

     sprintf(stroka, "Delta_e=%10.2f, lambda_x=%10.2f, Ar_=%10.2f", Delta_e, lambda_x, Ar_);
     InfMessage((AnsiString)stroka);

     if ((ABS(lambda_x - lambda_))/lambda_ >0.05 && n_loop<5) {  // Повторение расчета
        lambda_y = lambda_y/lambda_*lambda_x;
        lambda_ = (lambda_ + 2*lambda_x)/3;
        n_loop++;
        goto loop;
     }
     else {
        lambda_ = lambda_x;
     }
 //---------------------------------------------
 // Вычисление требуемой площади сечения
     // вычисление относительного эксцентриситета
     m_exc = omega*lambda_;
     m_exc = Round(m_exc, 2);

     double eta_work;

     Rel_A = 1/(2*u_);
     eta = Fun_eta(Rel_A, lambda_, m_exc, &eta_work);

     omega_ef = eta * omega;

     if (Delta>0.1) k_=0.16*(2+Delta)/(0.3+Delta);
     if (Delta<=0.1 && Delta>=0.03) k_=0.84;
     if (Delta<0.03) k_=0.51 + 11*Delta;
     if (Delta>=0.03) {
         lambda_x = 1/sqrt((1+k_*pow(omega_ef,0.8))*(0.035+Delta));
     }
     else {
         lambda_x = 1.67/(sqrt((1+k_*pow(omega_ef,0.8))*sqrt(Delta)));
     }
     fi_e = Delta*lambda_x*lambda_x;

     Ar_ = Nx/(fi_e*Ry*gamma_c);

     sprintf(stroka, "2: lambda_x=%10.2f, Ar_=%10.2f", lambda_x, Ar_);
     InfMessage((AnsiString)stroka);

     // Компоновка сечения
     mult_ix = sqrt((3+uef)/(12*(1+uef)));

     ix = lx_ef*sqrt(Ry/Ey)/lambda_x;

     h_opt = ix/mult_ix;  // высота сечения

     bf = h_opt/dzeta_sk;

     tf = bf/lambda_f;
     tw = (h_opt - 2*tf)/lambda_w;

     bf = Round_step(bf, Param_chosen_sect.round_width);
     tf = Round_row(tf, ind_round_thick);
     tw = Round_row(tw, ind_round_thick);
     hw = Round_step(h_opt - 2*tf, Param_chosen_sect.round_h);

     memcpy(&(sect_dubl), sect, sizeof(SECT_DVUTAVR));

     sect->h = hw;
     sect->b = tw;
     sect->b1 = bf;
     sect->h1 = tf;
     sect->b2 = bf;
     sect->h2 = tf;

     // вычисление геометрических характеристик сечения
     Get_param_sect(sect, &(param_sect));
     // напряжения во внешнем поясе
     sig_ext = -param_sect.Zct*(Mz/param_sect.Izz) + Nx/param_sect.Ar;
     // напряжения во внутреннем поясе
     sig_int = (param_sect.Hsect - param_sect.Zct)*(Mz/param_sect.Izz) + Nx/param_sect.Ar;

     if (flag_simm && sect_right != NULL) {
          memcpy(sect_right, sect, sizeof(SECT_DVUTAVR));
     }

      Sect_ParamFrame1->Write_sect(Sender);

      sigma_external = sig_ext;
      sigma_internal = sig_int;

      Sect_ParamFrame1Button_ApplyClick(Sender);
      Sect_ParamFrame1->CheckBox1->Checked = false;
      Sect_ParamFrame1->CheckBox1->Enabled = true;

      sigma_external = 0;
      sigma_internal = 0;

      flag_sect_change=false;
      BitBtn_Return->Enabled = true;
}
