//---------------------------------------------------------------------------
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

#pragma hdrstop

#include "sigma_beam.h"
#include "ListConst.h"
#include "message.h"


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

#pragma package(smart_init)
//---------------------------------------------------------------
// Вычислить напряжения на балке, иимеющей известную форму сечения, при действии момента в двух плоскостях
int sigma_beamXYZ_max(double *gt0, double *stress0, double sigma_point[][3], int index_sect) {
   // index_sect - 0 - вычислить напряжения в центре элемента, 1 - в первом узле, 2 - во втором узле
   // *stress : Усилия N, Qz, Mz, Mz1, Mz2, Qy, My, My1, My2
   //  sigma_point[9][3];   // Напряжения в характерных точках сечения:
                                // 0,1 - центральные точки верхнего(0) и нижнего (1) пояса,
                                // 2,3 - точки стыка верхнего пояса (4) и нижнего (5) и стенки
                                // 4 - центр тяжести
                                // 5,6 - крайние точки верхнего пояса,
                                // 7,8 - крайние точки нижнего пояса,

    GEOM_PARAM_SECT param_sect;
    double Hsect, side, thickness, diameter, delta,
           rect_b, rect_h, rect_b1, rect_h1;
    double t1, b1, t2, b2, t_st;
    int i,j,k, rc;
    double stress[5];
    double gt[MAX_ST];
    char stroka[120];
    double Forces[6]; // Для вычисления напряжений в крайних точках
   // Forces[0] = N
   // Forces[1] = Mk
   // Forces[2] = Mz // В плоскости стенки
   // Forces[3] = Qz
   // Forces[4] = My
   // Forces[5] = Qy
    double sigma_side[4];
                                          
    for (i=0; i<9; i++) {
       sigma_point[i][0] = sigma_point[i][1] = sigma_point[i][2] =  0;
    }
    
   // Вычислить напряжения на балке, иимеющей известную форму сечения, при действии момента в плоскости стенки
   // Вычисляются первые 5 строк sigma_point
    rc = sigma_beam_max(gt0, stress0, sigma_point, index_sect);
    if (rc>0)
       return 0;

    Forces[0] = stress0[0];      // N
    Forces[1] = 0;
    Forces[2] = stress0[2 + index_sect];  // Mz
    Forces[3] = stress0[1];      // Qz
    Forces[4] = stress0[6 + index_sect];  // My
    Forces[5] = stress0[5];      // Qy

    for (i=0; i<14; i++)
       gt[i]=gt0[i];

    if (gt[0]<0) {
      k= - gt[0];

      if (k == DVUTAVR && index_sect==1 && gt[7]>0)
         gt[2] = gt[7];  // высота сечения в сечении 1
      if (k == DVUTAVR && index_sect==2 && gt[8]>0)
         gt[2] = gt[8];  // высота сечения в сечении 2

      rc = Get_param_beam(gt, &param_sect);
      if (rc>0) return 2;
      /*
      sigma_point[0][] - напряжения Sxx, Sxy, Sэкв в крайней точке наружного пояса
      sigma_point[1][] - напряжения Sxx, Sxy, Sэкв в крайней точке внутреннего пояса
      sigma_point[2][] - напряжения Sxx, Sxy, Sэкв в верхней точке стенки
      sigma_point[3][] - напряжения Sxx, Sxy, Sэкв в нижней точке стенки
      sigma_point[4][] - напряжения Sxx, Sxy, Sэкв в центре тяжести сечения
      */
      // Вычислить нормальные напряжения на балке обобщенного сечения в четырех угловых точках
      // при действии момента в двух плоскостях
      sigma_beam_comm(&param_sect, Forces, sigma_side);

      for (i=0; i<4; i++) {
        sigma_point[i+5][0] = sigma_side[i];  // нормальные
        sigma_point[i+5][1] = 0;               // касательные
        sigma_point[i+5][2] = sigma_side[i];  // эквивалентные = нормальные
      }
    }
    return 0;
}
//---------------------------------------------------------------
// Вычислить напряжения на балке при действии момента в плоскости стенки, имеющей известную форму сечения
int sigma_beam(double *gt, double *stress, double *sigma_point) {
   // stress[0] = N
   // stress[1] = Q
   // stress[2] = M
    GEOM_PARAM_SECT param_sect;
    double Hsect, side, thickness, diameter,
           rect_b, rect_h, rect_b1, rect_h1;
    double t1, b1, t2, b2, t_st;
    int k, rc;

    if (gt[0]<0) {
       rc = Get_param_beam(gt, &param_sect);
       if (rc>0) return 2;
      k= - gt[0];
      switch (k) {
            case RECTANCULAR:  // прямоугольник
              Hsect = gt[2];
              sigma_point[0] = stress[0]/param_sect.Ar - 0.5*stress[2]*Hsect/param_sect.Izz;
              sigma_point[1]= stress[0]/param_sect.Ar + 0.5*stress[2]*Hsect/param_sect.Izz;

              sigma_point[2] = 0;
              sigma_point[3] = 0;
           break;
            case DVUTAVR:  // двутавр
              b1 = gt[5];
              t1 = gt[6];
              b2 = gt[3];
              t2 = gt[4];
              t_st = gt[1];
              sigma_point[0] = stress[0]/param_sect.Ar - stress[2]*param_sect.Zct/param_sect.Izz;
              sigma_point[1] = stress[0]/param_sect.Ar + stress[2]*(param_sect.Hsect - param_sect.Zct)/param_sect.Izz;

              sigma_point[2] = (stress[1]/(param_sect.Izz*t_st))*(b1*t1*(param_sect.Zct - t1/2));
              sigma_point[3] = (stress[1]/(param_sect.Izz*t_st))*(b2*t2*(param_sect.Hsect - param_sect.Zct - t2/2));
            break;
            case SQUARE_TUBE:
              side = gt[1];
              thickness = gt[2];

              sigma_point[0] = stress[0]/param_sect.Ar - 0.5*stress[2]*side/param_sect.Izz;
              sigma_point[1] = stress[0]/param_sect.Ar + 0.5*stress[2]*side/param_sect.Izz;

              sigma_point[2] = (0.25*stress[1]/(param_sect.Izz*thickness))*(side*thickness*(side-thickness));
              sigma_point[3] = sigma_point[2];

            break;
            case RECT_TUBE:  // труба прямоугольного сечения
              rect_b = gt[1];
              rect_h = gt[2];
              rect_b1 = gt[3];
              rect_h1 = gt[4];

              sigma_point[0] = stress[0]/param_sect.Ar - 0.5*stress[2]*rect_b/param_sect.Izz;
              sigma_point[1] = stress[0]/param_sect.Ar + 0.5*stress[2]*rect_b/param_sect.Izz;

              sigma_point[2] = (stress[1]/(param_sect.Izz*(rect_h - rect_h1)))*
                         (0.125*rect_h*(rect_b - rect_b1)*(rect_b + rect_b1));
              sigma_point[3] = sigma_point[2];

            break;
            case CIRCULAR_TUBE:  // труба круглого сечения
              diameter = gt[1];

              sigma_point[0] = stress[0]/param_sect.Ar - 0.5*stress[2]*diameter/param_sect.Izz;
              sigma_point[1] = stress[0]/param_sect.Ar + 0.5*stress[2]*diameter/param_sect.Izz;

              sigma_point[2] = 0;
              sigma_point[3] = 0;
            break;
            default:
              return 1;
           }
    }
    else {
       sigma_point[0] = sigma_point[1] = sigma_point[2] = sigma_point[3] = 0.0;
       return 0;
    }
    return 0;
}
//---------------------------------------------------------------
// Вычислить нормальные напряжения на балке обобщенного сечения в четырех угловых точках
// при действии момента в двух плоскостях
void sigma_beam_comm(GEOM_PARAM_SECT *param_sect, double *Forces, double *sigma_point) {
   // Forces[0] = N
   // Forces[1] = Mk
   // Forces[2] = Mz  // В плоскости стенки
   // Forces[3] = Qy
   // Forces[4] = My
   // Forces[5] = Qz
      if (param_sect->Ar >0) {
        sigma_point[0] = Forces[0]/param_sect->Ar - Forces[2]*param_sect->Zct/param_sect->Izz -
                                           Forces[4]*param_sect->point_stress[0][1]/param_sect->Iyy;
        sigma_point[1] = Forces[0]/param_sect->Ar - Forces[2]*param_sect->Zct/param_sect->Izz -
                                           Forces[4]*param_sect->point_stress[1][1]/param_sect->Iyy;
        sigma_point[2] = Forces[0]/param_sect->Ar + Forces[2]*(param_sect->Hsect - param_sect->Zct)/param_sect->Izz -
                                           Forces[4]*param_sect->point_stress[2][1]/param_sect->Iyy;
        sigma_point[3] = Forces[0]/param_sect->Ar + Forces[2]*(param_sect->Hsect - param_sect->Zct)/param_sect->Izz -
                                           Forces[4]*param_sect->point_stress[3][1]/param_sect->Iyy;
      }
      else {
        sigma_point[0] = sigma_point[1] = sigma_point[2] = sigma_point[3] = 0;
      }
 }
//---------------------------------------------------------------
// Вычислить напряжения на балке, иимеющей известную форму сечения, при действии момента в плоскости стенки
int sigma_beam_max(double *gt0, double *stress0, double sigma_point[][3], int index_sect) {
   // index_sect - 0 - вычислить напряжения в центре элемента, 1 - в первом узле, 2 - во втором узле
   // stress[0] = N
   // stress[1] = Q
   // stress[2] = M
    GEOM_PARAM_SECT param_sect;
    double Hsect, side, thickness, diameter, delta,
           rect_b, rect_h, rect_b1, rect_h1;
    double t1, b1, t2, b2, t_st;
    int i,j,k, rc;
    double stress[3];
    double gt[MAX_ST];
    char stroka[120];

    stress[0] = stress0[0];
    stress[1] = stress0[1];
    stress[2] = stress0[2+index_sect];


    for (i=0; i<14; i++)
       gt[i]=gt0[i];

    if (gt[0]<0) {
      k= - gt[0];

      if (k == DVUTAVR && index_sect==1 && gt[7]>0)
         gt[2] = gt[7];  // высота сечения в сечении 1
      if (k == DVUTAVR && index_sect==2 && gt[8]>0)
         gt[2] = gt[8];  // высота сечения в сечении 2

      rc = Get_param_beam(gt, &param_sect);
      if (rc>0) return 2;
      /*
      sigma_point[0][] - напряжения Sxx, Sxy, Sэкв в крайней точке наружного пояса
      sigma_point[1][] - напряжения Sxx, Sxy, Sэкв в крайней точке внутреннего пояса
      sigma_point[2][] - напряжения Sxx, Sxy, Sэкв в верхней точке стенки
      sigma_point[3][] - напряжения Sxx, Sxy, Sэкв в нижней точке стенки
      sigma_point[4][] - напряжения Sxx, Sxy, Sэкв в центре тяжести сечения
      */
      switch (k) {
            case RECTANCULAR:  // прямоугольник
              Hsect = gt[2];
              sigma_point[0][0] = stress[0]/param_sect.Ar - 0.5*stress[2]*Hsect/param_sect.Izz;
              sigma_point[0][1] = 0;
              sigma_point[0][2] = ABS(sigma_point[0][0]);  // поскольку касательные =0
              sigma_point[1][0] = stress[0]/param_sect.Ar + 0.5*stress[2]*Hsect/param_sect.Izz;
              sigma_point[1][1] = 0;
              sigma_point[1][2] = ABS(sigma_point[1][0]);  // поскольку касательные =0

              sigma_point[2][0] = stress[0]/param_sect.Ar;
              sigma_point[2][1] = 1.5*stress[1]/(param_sect.Ar);
              sigma_point[2][2] = sqrt(sigma_point[2][0]*sigma_point[2][0]+3*sigma_point[2][1]*sigma_point[2][1]);
              sigma_point[3][0] = sigma_point[2][0];
              sigma_point[3][1] = sigma_point[2][1];
              sigma_point[3][2] = sigma_point[2][2];
              sigma_point[4][0] = sigma_point[2][0];
              sigma_point[4][1] = sigma_point[2][1];
              sigma_point[4][2] = sigma_point[2][2];
           break;
            case DVUTAVR:  // двутавр
              b1 = gt[5];
              t1 = gt[6];
              b2 = gt[3];
              t2 = gt[4];
              t_st = gt[1];
              // напряжения Sxx, Sxy, Sэкв в крайней точке наружного пояса
              sigma_point[0][0] = stress[0]/param_sect.Ar - stress[2]*param_sect.Zct/param_sect.Izz;
              sigma_point[0][1] = 0;
              sigma_point[0][2] = ABS(sigma_point[0][0]);  // поскольку касательные =0

              // напряжения Sxx, Sxy, Sэкв в крайней точке внутреннего пояса
              sigma_point[1][0] = stress[0]/param_sect.Ar + stress[2]*(param_sect.Hsect - param_sect.Zct)/param_sect.Izz;
              sigma_point[1][1] = 0;
              sigma_point[1][2] = ABS(sigma_point[1][0]);  // поскольку касательные =0

              // напряжения Sxx, Sxy, Sэкв в верхней точке стенки
              sigma_point[2][0] = stress[0]/param_sect.Ar - stress[2]*(param_sect.Zct-t1)/param_sect.Izz;
              sigma_point[2][1] = (stress[1]/(param_sect.Izz*t_st))*(b1*t1*(param_sect.Zct - t1/2));
              sigma_point[2][2] = sqrt(sigma_point[2][0]*sigma_point[2][0]+3*sigma_point[2][1]*sigma_point[2][1]);

              // напряжения Sxx, Sxy, Sэкв в нижней точке стенки
              sigma_point[3][0] = stress[0]/param_sect.Ar + stress[2]*(param_sect.Hsect - param_sect.Zct - t2)/param_sect.Izz;
              sigma_point[3][1] = (stress[1]/(param_sect.Izz*t_st))*(b2*t2*(param_sect.Hsect - param_sect.Zct - t2/2));
              sigma_point[3][2] = sqrt(sigma_point[3][0]*sigma_point[3][0]+3*sigma_point[3][1]*sigma_point[3][1]);

              // напряжения Sxx, Sxy, Sэкв в центре тяжести сечения
              sigma_point[4][0] = stress[0]/param_sect.Ar;
              sigma_point[4][1] = (stress[1]/(param_sect.Izz*t_st))*(b1*t1*(param_sect.Zct - t1/2) +
                            0.5*(param_sect.Zct - t1)*(param_sect.Zct - t1)*t_st);
              sigma_point[4][2] = sqrt(sigma_point[4][0]*sigma_point[4][0]+3*sigma_point[4][1]*sigma_point[4][1]);

            break;
            case SQUARE_TUBE:
              side = gt[1];
              thickness = gt[2];

              // напряжения Sxx, Sxy, Sэкв в крайних наружных волокнах сечения
              sigma_point[0][0] = stress[0]/param_sect.Ar - stress[2]*param_sect.Zct/param_sect.Izz;
              sigma_point[0][1] = 0;
              sigma_point[0][2] = ABS(sigma_point[0][0]);  // поскольку касательные =0
              // напряжения Sxx, Sxy, Sэкв в крайних внутренних волокнах сечения
              sigma_point[1][0] = stress[0]/param_sect.Ar + stress[2]*(param_sect.Hsect - param_sect.Zct)/param_sect.Izz;
              sigma_point[1][1] = 0;
              sigma_point[1][2] = ABS(sigma_point[1][0]);  // поскольку касательные =0

              // напряжения Sxx, Sxy, Sэкв в стенках сечения вблизи наружной полки
              sigma_point[2][0] = stress[0]/param_sect.Ar - stress[2]*(param_sect.Zct-thickness)/param_sect.Izz;
              sigma_point[2][1] = (stress[1]/(param_sect.Izz*2*thickness))*(side*thickness*(param_sect.Zct - thickness/2));
              sigma_point[2][2] = sqrt(sigma_point[2][0]*sigma_point[2][0]+3*sigma_point[2][1]*sigma_point[2][1]);

              // напряжения Sxx, Sxy, Sэкв в стенках сечения вблизи внутренней полки
              sigma_point[3][0] = stress[0]/param_sect.Ar + stress[2]*(param_sect.Hsect - param_sect.Zct-thickness)/param_sect.Izz;
              sigma_point[3][1] = (stress[1]/(param_sect.Izz*2*thickness))*(side*thickness*(param_sect.Hsect - param_sect.Zct - thickness/2));
              sigma_point[3][2] = sqrt(sigma_point[3][0]*sigma_point[3][0]+3*sigma_point[3][1]*sigma_point[3][1]);
              // напряжения Sxx, Sxy, Sэкв в центре тяжести стенки

              sigma_point[4][0] = stress[0]/param_sect.Ar;
              sigma_point[4][1] = (stress[1]/(param_sect.Izz*2*thickness))*(side*thickness*(param_sect.Zct - thickness/2) +
                            (param_sect.Zct - thickness)*(param_sect.Zct - thickness)*thickness);
              sigma_point[4][2] = sqrt(sigma_point[4][0]*sigma_point[4][0]+3*sigma_point[4][1]*sigma_point[4][1]);

            break;
            case RECT_TUBE:  // труба прямоугольного сечения
              rect_b = gt[1];
              rect_h = gt[2];
              rect_b1 = gt[3];
              rect_h1 = gt[4];

              // напряжения Sxx, Sxy, Sэкв в крайних наружных волокнах сечения
              sigma_point[0][0] = stress[0]/param_sect.Ar - stress[2]*param_sect.Zct/param_sect.Izz;
              sigma_point[0][1] = 0;
              sigma_point[0][2] = ABS(sigma_point[0][0]);  // поскольку касательные =0
              // напряжения Sxx, Sxy, Sэкв в крайних внутренних волокнах сечения
              sigma_point[1][0] = stress[0]/param_sect.Ar + stress[2]*(param_sect.Hsect - param_sect.Zct)/param_sect.Izz;
              sigma_point[1][1] = 0;
              sigma_point[1][2] = ABS(sigma_point[1][0]);  // поскольку касательные =0

              // напряжения Sxx, Sxy, Sэкв в стенках сечения вблизи наружной полки
              sigma_point[2][0] = stress[0]/param_sect.Ar - stress[2]*(param_sect.Zct-rect_h1)/param_sect.Izz;
              sigma_point[2][1] = (stress[1]/(param_sect.Izz*2*rect_b1))*(rect_b*rect_h1*(param_sect.Zct - rect_h1/2));
              sigma_point[2][2] = sqrt(sigma_point[2][0]*sigma_point[2][0]+3*sigma_point[2][1]*sigma_point[2][1]);

              // напряжения Sxx, Sxy, Sэкв в стенках сечения вблизи внутренней полки
              sigma_point[3][0] = stress[0]/param_sect.Ar + stress[2]*(param_sect.Hsect - param_sect.Zct-rect_h1)/param_sect.Izz;
              sigma_point[3][1] = (stress[1]/(param_sect.Izz*2*rect_b1))*(rect_b*rect_h1*(param_sect.Hsect - param_sect.Zct - rect_h1/2));
              sigma_point[3][2] = sqrt(sigma_point[3][0]*sigma_point[3][0]+3*sigma_point[3][1]*sigma_point[3][1]);
              // напряжения Sxx, Sxy, Sэкв в центре тяжести стенки

              sigma_point[4][0] = stress[0]/param_sect.Ar;
              sigma_point[4][1] = (stress[1]/(param_sect.Izz*2*rect_b1))*(rect_b*rect_h1*(param_sect.Zct - rect_h1/2) +
                            (param_sect.Zct - rect_h1)*(param_sect.Zct - rect_h1)*rect_b1);
              sigma_point[4][2] = sqrt(sigma_point[4][0]*sigma_point[4][0]+3*sigma_point[4][1]*sigma_point[4][1]);

            break;
            case CIRCULAR_TUBE:  // труба круглого сечения
              diameter = gt[1];
              delta = gt[2];
              // напряжения Sxx, Sxy, Sэкв в крайних наружных волокнах сечения
              sigma_point[0][0] = stress[0]/param_sect.Ar - stress[2]*param_sect.Zct/param_sect.Izz;
              sigma_point[0][1] = 0;
              sigma_point[0][2] = ABS(sigma_point[0][0]);  // поскольку касательные =0
              // напряжения Sxx, Sxy, Sэкв в крайних внутренних волокнах сечения
              sigma_point[1][0] = stress[0]/param_sect.Ar + stress[2]*(param_sect.Hsect - param_sect.Zct)/param_sect.Izz;
              sigma_point[1][1] = 0;
              sigma_point[1][2] = ABS(sigma_point[1][0]);  // поскольку касательные =0

              // напряжения Sxx, Sxy, Sэкв в точке alfa=45 град
              sigma_point[2][0] = stress[0]/param_sect.Ar - stress[2]*diameter*0.25/param_sect.Izz;
              sigma_point[2][1] = 2*stress[1]*0.707107/(PI_*diameter*delta);
              sigma_point[2][2] = sqrt(sigma_point[2][0]*sigma_point[2][0]+3*sigma_point[2][1]*sigma_point[2][1]);

              // напряжения Sxx, Sxy, Sэкв в точке alfa=-45 град
              sigma_point[3][0] = stress[0]/param_sect.Ar + stress[2]*diameter*0.25/param_sect.Izz;
              sigma_point[3][1] = 2*stress[1]*0.707107/(PI_*diameter*delta);
              sigma_point[3][2] = sqrt(sigma_point[3][0]*sigma_point[3][0]+3*sigma_point[3][1]*sigma_point[3][1]);

              // напряжения Sxx, Sxy, Sэкв в стенках центре тяжести стенки
              sigma_point[4][0] = stress[0]/param_sect.Ar;
              sigma_point[4][1] = 2*stress[1]/(PI_*diameter*delta);
              sigma_point[4][2] = sqrt(sigma_point[4][0]*sigma_point[4][0]+3*sigma_point[4][1]*sigma_point[4][1]);
            break;
            default:
              return 1;
           }
    }
    else {
       for (i=0; i<5; i++)
         for (j=0; j<3; j++)
           sigma_point[i][j] = 0.0;
       return 0;
    }
    return 0;
}
//---------------------------------------------------------------
// Вычислить напряжения на балке, имеющей известную форму сечения
int sigma_beam_max_dubl(double *gt0, double *stress0, double sigma_point[][3], int index_sect) {
   // index_sect - 0 - вычислить напряжения в центре элемента, 1 - в первом узле, 2 - во втором узле
   // stress[0] = N
   // stress[1] = Q
   // stress[2] = M
    GEOM_PARAM_SECT param_sect;
    double Hsect, side, thickness, diameter, delta,
           rect_b, rect_h, rect_b1, rect_h1;
    double t1, b1, t2, b2, t_st;
    int i,j,k, rc;
    double stress[3];
    double gt[MAX_ST];
    char stroka[120];

    stress[0] = stress0[0];
    stress[1] = stress0[1];
    stress[2] = stress0[2+index_sect];


    for (i=0; i<14; i++)
       gt[i]=gt0[i];

    if (gt[0]<0) {
      k= - gt[0];

      if (k == DVUTAVR && index_sect==1 && gt[7]>0)
         gt[2] = gt[7];  // высота сечения в сечении 1
      if (k == DVUTAVR && index_sect==2 && gt[8]>0)
         gt[2] = gt[8];  // высота сечения в сечении 2

      rc = Get_param_beam(gt, &param_sect);
      if (rc>0) return 2;
      switch (k) {
            case RECTANCULAR:  // прямоугольник
              Hsect = gt[2];
              sigma_point[0][0] = stress[0]/param_sect.Ar - 0.5*stress[2]*Hsect/param_sect.Izz;
              sigma_point[0][1] = 0;
              sigma_point[0][2] = ABS(sigma_point[0][0]);  // поскольку касательные =0
              sigma_point[1][0] = stress[0]/param_sect.Ar + 0.5*stress[2]*Hsect/param_sect.Izz;
              sigma_point[1][1] = 0;
              sigma_point[1][2] = ABS(sigma_point[1][0]);  // поскольку касательные =0

              sigma_point[2][0] = stress[0]/param_sect.Ar;
              sigma_point[2][1] = 1.5*stress[1]/(param_sect.Ar);
              sigma_point[2][2] = sqrt(sigma_point[2][0]*sigma_point[2][0]+3*sigma_point[2][1]*sigma_point[2][1]);
              sigma_point[3][0] = sigma_point[2][0];
              sigma_point[3][1] = sigma_point[2][1];
              sigma_point[3][2] = sigma_point[2][2];
              sigma_point[4][0] = sigma_point[2][0];
              sigma_point[4][1] = sigma_point[2][1];
              sigma_point[4][2] = sigma_point[2][2];
           break;
            case DVUTAVR:  // двутавр
              b1 = gt[5];
              t1 = gt[6];
              b2 = gt[3];
              t2 = gt[4];
              t_st = gt[1];
              // напряжения Sxx, Sxy, Sэкв в крайней точке наружного пояса
              sigma_point[0][0] = stress[0]/param_sect.Ar - stress[2]*param_sect.Zct/param_sect.Izz;
              sigma_point[0][1] = 0;
              sigma_point[0][2] = ABS(sigma_point[0][0]);  // поскольку касательные =0

              // напряжения Sxx, Sxy, Sэкв в крайней точке внутреннего пояса
              sigma_point[1][0] = stress[0]/param_sect.Ar + stress[2]*(param_sect.Hsect - param_sect.Zct)/param_sect.Izz;
              sigma_point[1][1] = 0;
              sigma_point[1][2] = ABS(sigma_point[1][0]);  // поскольку касательные =0

              // напряжения Sxx, Sxy, Sэкв в верхней точке стенки
              sigma_point[2][0] = stress[0]/param_sect.Ar - stress[2]*(param_sect.Zct-t1)/param_sect.Izz;
              sigma_point[2][1] = (stress[1]/(param_sect.Izz*t_st))*(b1*t1*(param_sect.Zct - t1/2));
              sigma_point[2][2] = sqrt(sigma_point[2][0]*sigma_point[2][0]+3*sigma_point[2][1]*sigma_point[2][1]);

              // напряжения Sxx, Sxy, Sэкв в нижней точке стенки
              sigma_point[3][0] = stress[0]/param_sect.Ar + stress[2]*(param_sect.Hsect - param_sect.Zct - t2)/param_sect.Izz;
              sigma_point[3][1] = (stress[1]/(param_sect.Izz*t_st))*(b2*t2*(param_sect.Hsect - param_sect.Zct - t2/2));
              sigma_point[3][2] = sqrt(sigma_point[3][0]*sigma_point[3][0]+3*sigma_point[3][1]*sigma_point[3][1]);

              // напряжения Sxx, Sxy, Sэкв в центре тяжести сечения
              sigma_point[4][0] = stress[0]/param_sect.Ar;
              sigma_point[4][1] = (stress[1]/(param_sect.Izz*t_st))*(b1*t1*(param_sect.Zct - t1/2) +
                            0.5*(param_sect.Zct - t1)*(param_sect.Zct - t1)*t_st);
              sigma_point[4][2] = sqrt(sigma_point[4][0]*sigma_point[4][0]+3*sigma_point[4][1]*sigma_point[4][1]);

              if (index_sect==1) {
                //sprintf(stroka,"Сечение %d, H=%10.1f, N=%10.0f, M=%10.0f", index_sect, gt[2], stress[0]/1000, stress[2]/1e6);
                //InfMessage((AnsiString)stroka);
                //sprintf(stroka,"Нормальные напряжения в поясах, Sig1=%10.1f, Sig2=%10.0f", sigma_point[0][0], sigma_point[1][0]);
                //InfMessage((AnsiString)stroka);
              }  
            break;
            case SQUARE_TUBE:
              side = gt[1];
              thickness = gt[2];

              // напряжения Sxx, Sxy, Sэкв в крайних наружных волокнах сечения
              sigma_point[0][0] = stress[0]/param_sect.Ar - stress[2]*param_sect.Zct/param_sect.Izz;
              sigma_point[0][1] = 0;
              sigma_point[0][2] = ABS(sigma_point[0][0]);  // поскольку касательные =0
              // напряжения Sxx, Sxy, Sэкв в крайних внутренних волокнах сечения
              sigma_point[1][0] = stress[0]/param_sect.Ar + stress[2]*(param_sect.Hsect - param_sect.Zct)/param_sect.Izz;
              sigma_point[1][1] = 0;
              sigma_point[1][2] = ABS(sigma_point[1][0]);  // поскольку касательные =0

              // напряжения Sxx, Sxy, Sэкв в стенках сечения вблизи наружной полки
              sigma_point[2][0] = stress[0]/param_sect.Ar - stress[2]*(param_sect.Zct-thickness)/param_sect.Izz;
              sigma_point[2][1] = (stress[1]/(param_sect.Izz*2*thickness))*(side*thickness*(param_sect.Zct - thickness/2));
              sigma_point[2][2] = sqrt(sigma_point[2][0]*sigma_point[2][0]+3*sigma_point[2][1]*sigma_point[2][1]);

              // напряжения Sxx, Sxy, Sэкв в стенках сечения вблизи внутренней полки
              sigma_point[3][0] = stress[0]/param_sect.Ar + stress[2]*(param_sect.Hsect - param_sect.Zct-thickness)/param_sect.Izz;
              sigma_point[3][1] = (stress[1]/(param_sect.Izz*2*thickness))*(side*thickness*(param_sect.Hsect - param_sect.Zct - thickness/2));
              sigma_point[3][2] = sqrt(sigma_point[3][0]*sigma_point[3][0]+3*sigma_point[3][1]*sigma_point[3][1]);
              // напряжения Sxx, Sxy, Sэкв в центре тяжести стенки

              sigma_point[4][0] = stress[0]/param_sect.Ar;
              sigma_point[4][1] = (stress[1]/(param_sect.Izz*2*thickness))*(side*thickness*(param_sect.Zct - thickness/2) +
                            (param_sect.Zct - thickness)*(param_sect.Zct - thickness)*thickness);
              sigma_point[4][2] = sqrt(sigma_point[4][0]*sigma_point[4][0]+3*sigma_point[4][1]*sigma_point[4][1]);

            break;
            case RECT_TUBE:  // труба прямоугольного сечения
              rect_b = gt[1];
              rect_h = gt[2];
              rect_b1 = gt[3];
              rect_h1 = gt[4];

              // напряжения Sxx, Sxy, Sэкв в крайних наружных волокнах сечения
              sigma_point[0][0] = stress[0]/param_sect.Ar - stress[2]*param_sect.Zct/param_sect.Izz;
              sigma_point[0][1] = 0;
              sigma_point[0][2] = ABS(sigma_point[0][0]);  // поскольку касательные =0
              // напряжения Sxx, Sxy, Sэкв в крайних внутренних волокнах сечения
              sigma_point[1][0] = stress[0]/param_sect.Ar + stress[2]*(param_sect.Hsect - param_sect.Zct)/param_sect.Izz;
              sigma_point[1][1] = 0;
              sigma_point[1][2] = ABS(sigma_point[1][0]);  // поскольку касательные =0

              // напряжения Sxx, Sxy, Sэкв в стенках сечения вблизи наружной полки
              sigma_point[2][0] = stress[0]/param_sect.Ar - stress[2]*(param_sect.Zct-rect_h1)/param_sect.Izz;
              sigma_point[2][1] = (stress[1]/(param_sect.Izz*2*rect_b1))*(rect_b*rect_h1*(param_sect.Zct - rect_h1/2));
              sigma_point[2][2] = sqrt(sigma_point[2][0]*sigma_point[2][0]+3*sigma_point[2][1]*sigma_point[2][1]);

              // напряжения Sxx, Sxy, Sэкв в стенках сечения вблизи внутренней полки
              sigma_point[3][0] = stress[0]/param_sect.Ar + stress[2]*(param_sect.Hsect - param_sect.Zct-rect_h1)/param_sect.Izz;
              sigma_point[3][1] = (stress[1]/(param_sect.Izz*2*rect_b1))*(rect_b*rect_h1*(param_sect.Hsect - param_sect.Zct - rect_h1/2));
              sigma_point[3][2] = sqrt(sigma_point[3][0]*sigma_point[3][0]+3*sigma_point[3][1]*sigma_point[3][1]);
              // напряжения Sxx, Sxy, Sэкв в центре тяжести стенки

              sigma_point[4][0] = stress[0]/param_sect.Ar;
              sigma_point[4][1] = (stress[1]/(param_sect.Izz*2*rect_b1))*(rect_b*rect_h1*(param_sect.Zct - rect_h1/2) +
                            (param_sect.Zct - rect_h1)*(param_sect.Zct - rect_h1)*rect_b1);
              sigma_point[4][2] = sqrt(sigma_point[4][0]*sigma_point[4][0]+3*sigma_point[4][1]*sigma_point[4][1]);

            break;
            case CIRCULAR_TUBE:  // труба круглого сечения
              diameter = gt[1];
              delta = gt[2];
              // напряжения Sxx, Sxy, Sэкв в крайних наружных волокнах сечения
              sigma_point[0][0] = stress[0]/param_sect.Ar - stress[2]*param_sect.Zct/param_sect.Izz;
              sigma_point[0][1] = 0;
              sigma_point[0][2] = ABS(sigma_point[0][0]);  // поскольку касательные =0
              // напряжения Sxx, Sxy, Sэкв в крайних внутренних волокнах сечения
              sigma_point[1][0] = stress[0]/param_sect.Ar + stress[2]*(param_sect.Hsect - param_sect.Zct)/param_sect.Izz;
              sigma_point[1][1] = 0;
              sigma_point[1][2] = ABS(sigma_point[1][0]);  // поскольку касательные =0

              // напряжения Sxx, Sxy, Sэкв в точке alfa=45 град
              sigma_point[2][0] = stress[0]/param_sect.Ar - stress[2]*diameter*0.25/param_sect.Izz;
              sigma_point[2][1] = 2*stress[1]*0.707107/(PI_*diameter*delta);
              sigma_point[2][2] = sqrt(sigma_point[2][0]*sigma_point[2][0]+3*sigma_point[2][1]*sigma_point[2][1]);

              // напряжения Sxx, Sxy, Sэкв в точке alfa=-45 град
              sigma_point[3][0] = stress[0]/param_sect.Ar + stress[2]*diameter*0.25/param_sect.Izz;
              sigma_point[3][1] = 2*stress[1]*0.707107/(PI_*diameter*delta);
              sigma_point[3][2] = sqrt(sigma_point[3][0]*sigma_point[3][0]+3*sigma_point[3][1]*sigma_point[3][1]);

              // напряжения Sxx, Sxy, Sэкв в стенках центре тяжести стенки
              sigma_point[4][0] = stress[0]/param_sect.Ar;
              sigma_point[4][1] = 2*stress[1]/(PI_*diameter*delta);
              sigma_point[4][2] = sqrt(sigma_point[4][0]*sigma_point[4][0]+3*sigma_point[4][1]*sigma_point[4][1]);
            break;
            default:
              return 1;
           }
    }
    else {
       for (i=0; i<5; i++)
         for (j=0; j<3; j++)
           sigma_point[i][j] = 0.0;
       return 0;
    }
    return 0;
}








