MLEPerfilUFlexaoX(Perfil perfil, double tensao)
        {
            double t         = perfil.PegarEspessura();
            double raio      = perfil.PegarRaio();
            double elemento1 = perfil.PegarElemento1();
            double elemento2 = perfil.PegarElemento2();
            double elemento3 = perfil.PegarElemento3();
            double elemento5 = perfil.PegarElemento5();

            // Obtenção das larguras efetivas dos elementos de Perfil U
            double ycgf = 0, contador = 3;
            double ycgi = ycg, areaRetirar;

            while (contador >= 2)
            {
                contador = 0;
                //Obtenção das Larguras efetivas de cada elemento, nas configurações de Perfil U

                // Enrijecedor
                if (b1 == 0)
                {
                    b1ef = 0;
                }
                else
                {
                    b1ef = NBR.MLECompleta("AL", "FLEXAOX", tensao, b1, t, raio, b1, ycgi).ElementAt(0);
                }
                if (b1 == b1ef)
                {
                    ycgf = ycgi;
                }
                else
                {
                    areaRetirar = t * ((b1 - b1ef));
                    double areaEfetiva = area - t * ((b1 - b1ef));
                    ycgf = ycgi + ((areaRetirar / areaEfetiva) * (ycg - t * 0.5)); contador += 1;
                }

                // Mesa, totalmente comprimida
                if (b1 == 0)
                { // Caso não tenha enrijecedor
                    b2ef         = NBR.MLECompleta("AL", "COMPRESSAO", tensao, b2, t, raio, b2, ycgf);
                    areaRetirar  = t * (b2 - b2ef.ElementAt(0));
                    areaEfetiva -= areaRetirar;
                }
                else
                { // Caso tenha enrijecedor
                    b2ef         = NBR.elementoEnrijecido(b2, elemento1, b1ef, tensao, t);
                    areaRetirar  = t * (b2 - b2ef.ElementAt(0) + b1 - b2ef.ElementAt(1));
                    areaEfetiva -= areaRetirar;
                }

                if (areaRetirar == 0)
                {
                }
                else
                {
                    ycgf += ((areaRetirar / areaEfetiva) * (ycg - t * 0.5)); contador += 1;
                }

                //Alma, parcialmente comprimida
                b3ef  = NBR.MLECompleta("AA", "FLEXAOX", tensao, b3, t, raio, b3, ycgf).ElementAt(0);
                b3ef2 = NBR.MLECompleta("AA", "FLEXAOX", tensao, b3, t, raio, b3, ycgf).ElementAt(1);
                if (b3 == b3ef + b3ef2)
                {
                }
                else
                {
                    areaRetirar  = t * (b3 - b3ef - b3ef2);
                    areaEfetiva -= areaRetirar;
                    ycgf        += Math.Round(((areaRetirar / areaEfetiva) * (ycg - t * 0.5)), 3); contador += 3;
                }

                if (contador >= 3) //Caso enrijecedor, mesa e alma não sejam totalmente efetivos;
                {
                    double b3efi = b3ef; double b3ef2i = b3ef2;

                    b3ef  = NBR.MLECompleta("AA", "FLEXAOX", tensao, b3, t, raio, b3, ycgf).ElementAt(0);
                    b3ef2 = NBR.MLECompleta("AA", "FLEXAOX", tensao, b3, t, raio, b3, ycgf).ElementAt(1);

                    areaRetirar  = t * (b3 - b3ef - b3ef2);
                    areaEfetiva -= areaRetirar;
                    ycgf        += Math.Round(((areaRetirar / areaEfetiva) * (ycg - t * 0.5)), 3);

                    double relacao = (b3efi + b3ef2i) / (b3ef + b3ef2); // Verifica se pode se desprezar a proxima iteração.
                    if (relacao < 0.95)
                    {
                        ycgi = ycgf; continue;
                    }
                    else
                    {
                        break;
                    }
                }
                ycgi = ycgf;
            }

            List <double> lstEfetivos = new List <double>();

            // (t, b1ef, b2ef, b3ef, b4ef, b5ef, b3ef2)
            lstEfetivos.Add(t);                 //0
            lstEfetivos.Add(b1ef);              //1, comprimid0
            lstEfetivos.Add(b2ef.ElementAt(0)); //2, comprimida
            lstEfetivos.Add(b3ef);              //3. parcialmente comprimido
            lstEfetivos.Add(b4);                //4, tracionado
            lstEfetivos.Add(b5);                //5, tracionado
            lstEfetivos.Add(ycgf);              //6
            lstEfetivos.Add(xg);                //7
            lstEfetivos.Add(b2ef.ElementAt(1)); //8, ds
            lstEfetivos.Add(b3ef2);             //9

            return(lstEfetivos);
        }
        MLEPerfilUFlexaoY(Perfil perfil, double tensao)
        {
            double t         = perfil.PegarEspessura();
            double raio      = perfil.PegarRaio();
            double elemento1 = perfil.PegarElemento1();
            double elemento2 = perfil.PegarElemento2();
            double elemento4 = perfil.PegarElemento4();
            double elemento3 = perfil.PegarElemento3();
            double elemento5 = perfil.PegarElemento5();

            double xgi, xgf = 0;
            double tensaoAt1 = 0, tensaoAt2 = tensao;

            xgi = xg;
            // Primeira Situaçao - Alma comprimida
            //Alma totalmente comprimida = elemento AA
            while (tensaoAt1 != tensaoAt2) // TODO corrigir loop infinito
            {
                tensaoAt1 = tensaoAt2;

                b3ef = NBR.MLECompleta("AA", "COMPRESSAO", tensaoAt1, b3, t, raio, b3, xg).ElementAt(0);
                if (b3ef != b3)
                {
                    double areaRetirar = (b3 - b3ef) * t;
                    xgf = xgi + areaRetirar / area * (xg - 0.5 * t);
                }
                else
                {
                    xgf = xgi;
                }

                tensaoAt2 = Math.Round(tensao * xgf / (b2 - xgf), 2);
                xgi       = xgf;
                if (xgf > elemento2)
                {
                    xgf = elemento2; b3ef = 0; break;
                }
            }

            //Verificação da Mesa, elemento parcialmente comprimido - AA
            double xgMesa;

            if (xgf > 0.5 * elemento2)
            {
                xgMesa = xgf;
            }
            else
            {
                xgMesa = elemento2 - xgf;
            }
            b2ef = NBR.MLECompleta("AA", "FLEXAOY", tensaoAt2, b2, t, raio, 0, xgMesa);

            List <double> lstEfetivos = new List <double>();

            // (t, b1ef, b2ef, b3ef, b4ef, b5ef, b3ef2)
            lstEfetivos.Add(t);                 //0
            lstEfetivos.Add(b1);                //1
            lstEfetivos.Add(b2ef.ElementAt(0)); //2
            lstEfetivos.Add(b3ef);              //3
            lstEfetivos.Add(b2ef.ElementAt(0)); //4, b4ef
            lstEfetivos.Add(b5);                //5
            lstEfetivos.Add(ycg);               //6
            lstEfetivos.Add(xgf);               //7
            lstEfetivos.Add(b2ef.ElementAt(1)); //8, ds
            lstEfetivos.Add(b3ef2);             //9
            lstEfetivos.Add(b2ef.ElementAt(1)); //10, bef2

            return(lstEfetivos);
        }
        MLEPerfilUCompressao(Perfil perfil, double tensao)
        {
            double t         = perfil.PegarEspessura();
            double raio      = perfil.PegarRaio();
            double elemento1 = perfil.PegarElemento1();
            double elemento2 = perfil.PegarElemento2();
            double elemento3 = perfil.PegarElemento3();
            double elemento5 = perfil.PegarElemento5();

            string solicitacao = "COMPRESSAO";

            //Obtenção das Larguras efetivas de cada elemento, nas configurações de Perfil U
            // Elementos totalmente comprimidos
            if (b1 <= 0)
            {
                b1ef = 0;
            }
            else
            {
                b1ef = NBR.MLECompleta("AL", solicitacao, tensao, b1, t, raio, 0, ycg).ElementAt(0);
            }

            if (b1 <= 0)
            {
                b2ef = NBR.MLECompleta("AL", solicitacao, tensao, b2, t, raio, 0, ycg);
            }
            else
            {
                b2ef = NBR.elementoEnrijecido(b2, elemento1, b1ef, tensao, t);
            }

            b3ef  = NBR.MLECompleta("AA", solicitacao, tensao, b3, t, raio, 0, ycg).ElementAt(0);
            b3ef2 = NBR.MLECompleta("AA", solicitacao, tensao, b3, t, raio, 0, ycg).ElementAt(1);

            if (b5 <= 0)
            {
                b5ef = 0;
            }
            else
            {
                b5ef = NBR.MLECompleta("AL", solicitacao, tensao, b5, t, raio, 0, ycg).ElementAt(0);
            }

            if (b5 <= 0)
            {
                b4ef = NBR.MLECompleta("AL", solicitacao, tensao, b4, t, raio, 0, ycg);
            }
            else
            {
                b4ef = NBR.elementoEnrijecido(b4, elemento5, b5ef, tensao, t);
            }

            List <double> listaEfetivos = new List <double>();

            // (t, b1ef, b2ef, b3ef, b4ef, b5ef, b3ef2)
            listaEfetivos.Add(t);                 //0
            listaEfetivos.Add(b1ef);              //1
            listaEfetivos.Add(b2ef.ElementAt(0)); //2
            listaEfetivos.Add(b3ef);              //3
            listaEfetivos.Add(b4ef.ElementAt(0)); //4
            listaEfetivos.Add(b5ef);              //5
            listaEfetivos.Add(ycg);               // 6, ycgEfetivo
            listaEfetivos.Add(xg);                //7
            listaEfetivos.Add(b2ef.ElementAt(1)); //8, ds
            listaEfetivos.Add(0);                 //9, b3ef2
            //  listaEfetivos.Add(Form1.xg);

            return(listaEfetivos);
            //return new Tuple<double, double, double, double, double, double>
            //   (espessura, b1ef, b2ef, b3ef, b4ef, b5ef, ycg, xg);
        }