//-------------------------------------------------------------------------------------
// Проверка местной устойчивости по teta-методу
double CheckStab_teta(SECT_DVUTAVR *sect1, SECT_DVUTAVR *sect2, double sigma_loc, double l_ef,
					  double M1, double M2, double Q_,  double N_,
                      double Ry, double Rs, double Ey, double a_otsek, int index_loc, double gamma_c) {
    int i, rc;
    int k, j, j1, j2, i1, i2, i0;
    double sigma_max, tau_max, sigma_1;
    double sigma_cr, tau_cr, k_sig, k_tau;
    double krit;
    double a_max;
    int n_nst, j0;
    char stroka[240];
    double sigma_cr_norm_;
    double tau_cr_norm_;
    double delta_h, delta_M;
    double hw;
    double Teta, factor;
    float delta, c_cr;
    double tw, bf, tf;
    double h1, h2;
    double hef, mu;
    double sigma_ext, sigma_int;

    //int    k1, k2;  // Номера сечений для отчета
    GEOM_PARAM_SECT param_sect;
    SECT_DVUTAVR sect0;

    //k1 = 0; k2 = N_TETA-1;
    //k0 = (k1 + k2)/2;


      // высоты стенок отсека
      h1 = sect1->h;
      h2 = sect2->h;
      tw = sect1->b;

      /*
      sprintf(stroka,"Отсек %d, элементы %d - %d, узлы %d - %d", i, j1+1, j2+2, i1, i2);
      InfMessage(stroka);
      */

       delta_h = (h1-h2)/(N_TETA-1);
       delta_M = (M1-M2)/(N_TETA-1);

       hw = h1;
       memcpy(&sect0, sect1, sizeof(SECT_DVUTAVR));
       Teta = 0.0;
       // Цикл по N_TETA сечениям в отсеке
       for (k=0; k<N_TETA; k++) {
          sect0.h = hw; // высота двутавра
          Get_param_sect(&sect0, &param_sect);
		  sigma_ext = -M1*(param_sect.Zct - sect0.h1)/param_sect.Izz;
          sigma_int = M1*(param_sect.Hsect - param_sect.Zct - sect0.h2)/param_sect.Izz;

       // минимальное напряжение в сечении
          if (sigma_ext < sigma_int) {
             sigma_max = -sigma_ext;  // напряжение сжатия принимается со знаком +, растяжения со знаком -
             sigma_1 = -sigma_int;
             bf = sect0.b1;
             tf = sect0.h1;
          }
          else {
             sigma_max = -sigma_int;  // напряжение сжатия принимается со знаком +, растяжения со знаком -
             sigma_1 = -sigma_ext;
             bf = sect0.b2;
             tf = sect0.h2;
          }
          if (sigma_max <= 0) {
            //Tabl_Check_Stab_norm[i].a_otsek = 0;
            return 0.0;
          }
          a_max = (sigma_max - sigma_1)/sigma_max;
          //a_max = MAX(1, a_max);
          //  a_max=2.0;
          // приведенная высота стенки, необходима для функций sigma_cr_norm(), tau_cr_norm_ = tau_cr_norm(a_otsek[i]);
          if (a_max >=1.4 && a_max <=4)
             hef = 2*hw/a_max;
          else
             hef = hw;

          tau_max = (ABS(Q_))/(tw*hw);

          sigma_cr = Sigma_cr_norm(Ry, Ey, hef, bf, tf, tw, &delta, &c_cr);

          tau_cr = Tau_cr_norm(Ry, Rs, Ey, hef, tw, a_otsek);

          k_sig = sigma_max/sigma_cr;
          k_tau = tau_max/tau_cr;

       //sprintf(stroka,"sigma_cr=%g, tau_cr=%g, a_max=%g",  sigma_cr, tau_cr, a_max);
       //InfMessage(stroka);
       //sprintf(stroka,"sigma=%g, tau=%g", sigma_max, tau_max);
       //InfMessage(stroka);

		 // Обработка локальных напряжений
		 double beta = 0.8;
		 double sigma_loc_cr = Sigma_loc_cr(Ry, Ey, hef, l_ef, beta, bf, tf, tw, a_otsek);

         double k_sig_loc = sigma_loc/sigma_loc_cr;

       //sprintf(stroka,"sigma_cr=%g, tau_cr=%g, a_max=%g",  sigma_cr, tau_cr, a_max);
       //InfMessage(stroka);
       //sprintf(stroka,"sigma=%g, tau=%g", sigma_max, tau_max);
       //InfMessage(stroka);
         if (sigma_ext < sigma_int && index_loc == 0 ||
           sigma_ext > sigma_int && index_loc == 1) {
           krit = sqrt((k_sig + k_sig_loc)*(k_sig + k_sig_loc) + k_tau*k_tau)/gamma_c;
         }
         else {
           krit = MAX(sqrt((k_sig)*(k_sig) + k_tau*k_tau)/gamma_c,
                      sqrt((k_sig_loc)*(k_sig_loc) + k_tau*k_tau)/gamma_c);
         }

          if (k == 0 || k == N_TETA-1 )
             factor = 0.5;
          else
             factor = 1.0;
          Teta += krit*factor;

          hw -= delta_h;

          M1 -= delta_M;
       }
       Teta = Teta/((N_TETA-1)*gamma_c);

     return Teta;
}