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); }