//---------------------------------------------------------------------------

#include <math.h>

#pragma hdrstop

#include "CheckFunction.h"
#include "ListConst.h"


//---------------------------------------------------------------------------

#pragma package(smart_init)
//----------------------------------------------------------------------------
// Вычисление максимальных касательных напряжений в стенке двутавра переменной высоты
double Calc_Tau_Pop_Force(double N_, double M_, double Q_1, SECT_DVUTAVR *sect, GEOM_PARAM_SECT *param_netto, double alfa) {
// Сопромат, Александров, стр. 217-218, ф.7.25, 7.26
          double tau_Q[3], tau_M[3], tau_N[3], Af1, Af2, tan_a, A_dev, Aots[3], Aots_dev[3];
          double Izz_dev, Sx_dev[3], tau_max;
          double h_, t_;
          int i;

          if (alfa==0) {  // Постоянная высота стенки
            // Касательные напряжения в ц.т.
            tau_max = Q_1*param_netto->Sx[0]/(param_netto->Izz*sect->b);
          }
          else {
        // Сопромат, Александров, стр. 217-218, ф.7.25, 7.26
            tan_a = tan(alfa/57.3);

            Af1 = sect->b1*sect->h1;
            Af2 = sect->b2*sect->h2;
            h_ = sect->h;
            t_ = sect->b;
            Izz_dev = (Af1*(h_+sect->h1)+Af2*(h_+sect->h2)+t_*h_*h_*0.25)*tan_a;   // производная Izz
            Sx_dev[0] = Af1*tan_a/2;         // производная Sx
            Sx_dev[1] = (Af1 + t_*h_/2)*tan_a;         // производная Sx
            Sx_dev[2] = Af2*tan_a/2;         // производная Sx
            A_dev = t_*tan_a;
            Aots[0] = Af1;
            Aots[1] = Af1 + t_*h_/2;
            Aots[2] = Af2;
            Aots_dev[0]=0;
            Aots_dev[1]=t_*tan_a/2;
            Aots_dev[2]=0;
            tau_max = 0;
            for (i=0; i<3; i++) {
              tau_Q[i] = Q_1*param_netto->Sx[i]/(param_netto->Izz*t_);
              tau_M[i] = (M_/t_)*(Sx_dev[i]*param_netto->Izz - Izz_dev*param_netto->Sx[i])/(param_netto->Izz*param_netto->Izz);
              //tau_N[i] = (N_*tan_a/param_netto.Ar)*(Af1 + Af2 + 2*t_*y_[i] - 2*Af_[i]);
              tau_N[i] = (N_/t_)*(Aots_dev[i]*param_netto->Ar - A_dev*Aots[i])/(param_netto->Ar*param_netto->Ar);
              tau_max = MAX(tau_max , (ABS(tau_Q[i] + tau_M[i] + tau_N[i])));
            }
          }
          return tau_max;
}