private (string densidade, string viscosidade) FluidoParaDenVis(string nome)
        {
            MaterialFluidoOPI material = InicializadorObjetos.MaterialFluidoOPI(nome);

            double dens = Math.Round(material.Densidade / 1000.0, 2);
            double vis  = Math.Round(material.Viscosidade * 1000, 2);

            return(dens.ToString(), vis.ToString());
        }
示例#2
0
        /// <summary>
        /// Botão para calculo inicial da coluna.
        /// </summary>
        private void btnInputInicial_Click(object sender, EventArgs e)
        {
            cmbFluidoLKTxt        = cmbFluidoLK.Text;
            cmbFluidoHKTxt        = cmbFluidoHK.Text;
            cmbCondicaoEntradaTxt = "Líquido saturado";
            nudRazaoQDbl          = 0.0;
            nudFracaoEntradaLKDbl = 0.5;
            nudRefluxoDbl         = 2.0;
            nudXdDbl          = 0.9;
            nudXbDbl          = 0.1;
            nudTemperaturaDbl = 50 + 273.15; // Temperatura tem que ser usada em Kelvin
            nudPressaoDbl     = 1E5;

            if ((cmbFluidoLKTxt != "" && cmbFluidoHKTxt != "") && cmbFluidoLKTxt != cmbFluidoHKTxt)
            {
                //EventosInputs(false);

                fluidoLK = new FluidoIdealOPIII(InicializadorObjetos.MaterialFluidoOPIII(cmbFluidoLKTxt), nudTemperaturaDbl);
                fluidoHK = new FluidoIdealOPIII(InicializadorObjetos.MaterialFluidoOPIII(cmbFluidoHKTxt), nudTemperaturaDbl);
                mistura  = new MisturaBinaria(fluidoLK, fluidoHK, nudFracaoEntradaLKDbl, nudTemperaturaDbl, nudPressaoDbl);

                if (mistura.Alpha > 1) // Condição para que a coluna fique em função do LK
                {
                    ColunaMcCabeThiele = new ColunaMcCabeThiele(mistura, nudXdDbl, nudXbDbl, nudFracaoEntradaLKDbl, nudRefluxoDbl, nudRazaoQDbl);

                    AtualizaEquilibrio();
                    AtualizaLinhasOP();
                    AtualizaLinhaQ();
                    AtualizaPratos();

                    chart.Series["Equilibrio"].LegendText = $"ELV {cmbFluidoLKTxt}, {cmbFluidoHKTxt}";
                    chart.Series["LinhaOP"].LegendText    = "Linha de Operação";
                    chart.Series["PontoQ"].LegendText     = "Linha Q";
                    chart.Series["Linha45"].Points.DataBindXY(new double[] { 0, 1 }, new double[] { 0, 1 });
                    txbConvergencia.Text      = "OK";
                    txbConvergencia.ForeColor = System.Drawing.Color.Green;

                    cmbCondicaoEntradaDin.Text  = cmbCondicaoEntradaTxt.ToLower();
                    nudFracaoEntradaLKDin.Value = Convert.ToDecimal(nudFracaoEntradaLKDbl);
                    nudRefluxoDin.Value         = Convert.ToDecimal(nudRefluxoDbl);
                    nudXd.Value         = Convert.ToDecimal(nudXdDbl);
                    nudXb.Value         = Convert.ToDecimal(nudXbDbl);
                    nudPressaoDin.Value = Convert.ToDecimal(nudPressaoDbl / 1e5);

                    VerificaConvergencia();

                    txbConvergencia.Visible = true;
                    labMudanca.Visible      = true;
                    gubVariaveis.Visible    = true;
                    gubResultados.Visible   = true;
                    gubGrafico.Visible      = true;
                    labResultados.Visible   = true;
                }
                else
                {
                    txbConvergencia.Visible   = true;
                    txbConvergencia.Text      = "Fluido HK é mais volátil";
                    txbConvergencia.ForeColor = System.Drawing.Color.Maroon;
                    labMudanca.Visible        = false;
                    gubGrafico.Visible        = false;
                    gubVariaveis.Visible      = false;
                    gubResultados.Visible     = false;
                    labResultados.Visible     = false;
                }
            }
            else
            {
                txbConvergencia.Visible   = true;
                txbConvergencia.Text      = "Fluidos idêndicos!";
                txbConvergencia.ForeColor = System.Drawing.Color.Maroon;
                labMudanca.Visible        = false;
                gubGrafico.Visible        = false;
                gubVariaveis.Visible      = false;
                gubResultados.Visible     = false;
                labResultados.Visible     = false;
            }
        }
        private void cmbTrocadorMaterial_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            MaterialTubulacao materialTubulacao = InicializadorObjetos.MaterialTubulacao(cmbTrocadorMaterial.Text);

            txbTrocadorRugosidade.Text = $"{Math.Round(materialTubulacao.Rugosidade * 1e2),1} cm";
        }
        private void btnCalcular_Click(object sender, EventArgs e)
        {
            txbErro.Text = "";

            // Fluido Anular
            if (cmbFluidoAnular.Text == "" || cmbFluidoInterno.Text == "" || cmbTrocadorMaterial.Text == "")
            {
                txbErro.Text = "Inputs incorretos";
                return;
            }

            string fluidoAnularNome = cmbFluidoAnular.Text;
            double fluidoAnularAPI  = Convert.ToDouble(nudFluidoAnularAPI.Value);
            double fluidoAnularTemp = Convert.ToDouble(nudFluidoAnularTempEnt.Value) + 273.15;   // T em K
            double tempAnularSai    = Convert.ToDouble(nudFluidoAnularTempSaida.Value) + 273.15; // T em L

            if (fluidoAnularNome == "Óleo (ºAPI)")
            {
                materialFluidoAnular = new MaterialOleoAPI(fluidoAnularAPI, fluidoAnularTemp);
            }
            else
            {
                materialFluidoAnular = InicializadorObjetos.MaterialFluidoOPII(fluidoAnularNome, fluidoAnularTemp);
            }

            fluidoAnularEnt = new FluidoOPII(materialFluidoAnular, fluidoAnularTemp);

            // Fluido Interno
            string fluidoInternoNome = cmbFluidoInterno.Text;
            double fluidoInternoAPI  = Convert.ToDouble(nudFluidoInternoAPI.Value);
            double fluidoInternoTemp = Convert.ToDouble(nudFluidoInternoTempEnt.Value) + 273.15;   // T em K
            double tempInternoSai    = Convert.ToDouble(nudFluidoInternoTempSaida.Value) + 273.15; // T em K

            if (fluidoInternoNome == "Óleo (ºAPI)")
            {
                materialFluidoInterno = new MaterialOleoAPI(fluidoInternoAPI, fluidoInternoTemp);
            }
            else
            {
                materialFluidoInterno = InicializadorObjetos.MaterialFluidoOPII(fluidoInternoNome, fluidoInternoTemp);
            }

            fluidoInternoEnt = new FluidoOPII(materialFluidoInterno, fluidoInternoTemp);

            // Tubulações
            string            tubulacaoMaterialNome = cmbTrocadorMaterial.Text;
            double            tubulacaoComprimento  = Convert.ToDouble(nudTrocadorComprimento.Value);
            MaterialTubulacao materialTubulacao     = InicializadorObjetos.MaterialTubulacao(tubulacaoMaterialNome);
            const double      espessura             = 0; // Considerando a tubulação sem espeçura.

            // Tubulação Interna
            double tubInternaDiam = Convert.ToDouble(nudTrocadorDiametroInterno.Value) * 1e-2; // Diametro em m

            tubulacaoInterna = new TubulacaoDuploTubo(tubInternaDiam, espessura, tubulacaoComprimento, materialTubulacao, EquipamentoOPII.TipoTubo.interno);

            // Tubulação Anular
            double tubAnularDiam = Convert.ToDouble(nudTrocadorDiametroAnular.Value) * 1e-2; // Diametro em m

            tubulacaoAnular = new TubulacaoDuploTubo(tubAnularDiam, espessura, tubulacaoComprimento, materialTubulacao, EquipamentoOPII.TipoTubo.anular, tubInternaDiam);

            // Não executa se a diferença de temperatura entre os fluido não for miníma.
            if (Math.Abs(fluidoAnularTemp - fluidoInternoTemp) < 2)
            {
                txbErro.Text = "Inputs incorretos";
                return;
            }

            tuboQente = (fluidoAnularTemp > fluidoInternoTemp) ? EquipamentoOPII.TipoTubo.anular : EquipamentoOPII.TipoTubo.interno;

            if (tuboQente == EquipamentoOPII.TipoTubo.anular)
            {
                if (fluidoAnularEnt.Temperatura < 40 + 273.15 || fluidoInternoEnt.Temperatura > 40 + 273.15) // Fluido Quente pouco quente ou frio pouco frio
                {
                    txbErro.Text = "Verifique as temp";
                    return;
                }
            }
            else
            {
                if (fluidoAnularEnt.Temperatura > 40 + 273.15 || fluidoInternoEnt.Temperatura < 40 + 273.15) // Fluido Quente pouco quente ou frio pouco frio
                {
                    txbErro.Text = "Verifique as temp";
                    return;
                }
            }

            // Trocador
            double vazaoQente       = Convert.ToDouble(nudVazaoQuente.Value) / 3600.0; // Vazao em m^3/s
            double fatorIncrustacao = Convert.ToDouble(nudTrocadorFatorEncrustacao.Value);

            trocador = new TrocadorDuploTubo(fluidoAnularEnt, tempAnularSai, fluidoInternoEnt, tempInternoSai, vazaoQente, tubulacaoAnular, tubulacaoInterna, fatorIncrustacao);

            trocador.CalculaTroca();
            fluidoAnularSai  = trocador.FluidoAnularSai;
            fluidoInternoSai = trocador.FluidoInternoSai;

            if (trocador.Anular == EquipamentoOPII.FluidoTroca.quente)
            {
                txbFigFluidoAnular.Lines = new string[] { "Fluido Anular: ", $"[{trocador.Anular}]", $"{trocador.FluidoAnularEnt.Material.Componente}",
                                                          $"T ent = {trocador.FluidoAnularEnt.Temperatura - 273.15} ºC", $"Vazão = {trocador.VazaoQuente * 3600} m^3/h" };
                txbFigFluidoInterno.Lines = new string[] { "Fluido Interno: ", $"[{trocador.Interno}]", $"{trocador.FluidoInternoEnt.Material.Componente}",
                                                           $"T ent = {trocador.FluidoInternoEnt.Temperatura - 273.15} ºC", $"Vazão = {Math.Round(trocador.VazaoFrio * 3600,1)} m^3/h" };
            }
            else
            {
                txbFigFluidoAnular.Lines = new string[] { "Fluido Anular: ", $"[{trocador.Anular}]", $"{trocador.FluidoAnularEnt.Material.Componente}",
                                                          $"T ent = {trocador.FluidoAnularEnt.Temperatura - 273.15} ºC", $"Vazão = {Math.Round(trocador.VazaoFrio * 3600,1)} m^3/h" };
                txbFigFluidoInterno.Lines = new string[] { "Fluido Interno: ", $"[{trocador.Interno}]", $"{trocador.FluidoInternoEnt.Material.Componente}",
                                                           $"T ent = {trocador.FluidoInternoEnt.Temperatura - 273.15} ºC", $"Vazão = {trocador.VazaoQuente * 3600} m^3/h" };
            }

            txbFigFluidoAnularTxt  = txbFigFluidoAnular.Lines;
            txbFigFluidoInternoTxt = txbFigFluidoInterno.Lines;

            txbFigFluidoAnular.Lines  = new string[] { txbFigFluidoAnularTxt[0], txbFigFluidoAnularTxt[1], txbFigFluidoAnularTxt[2], txbFigFluidoAnularTxt[3], txbFigFluidoAnularTxt[4] };
            txbFigFluidoInterno.Lines = new string[] { txbFigFluidoInternoTxt[0], txbFigFluidoInternoTxt[1], txbFigFluidoInternoTxt[2], txbFigFluidoInternoTxt[3], txbFigFluidoInternoTxt[4] };

            // Ativa os elementos da UI.
            txbFigFluidoAnular.Visible  = true;
            txbFigFluidoInterno.Visible = true;
            chartPerdaCarga.Visible     = true;
            chartComprimento.Visible    = true;
            gubResultados.Visible       = true;
            gubVarFluidoInterno.Visible = true;
            gubVarFluidoAnular.Visible  = true;
            gubVarTrocador.Visible      = true;
            tabControl.SelectedIndex    = 1;

            if (trocador.Anular == EquipamentoOPII.FluidoTroca.quente)
            {
                nudQuenteSaiMin = Convert.ToDecimal(trocador.FluidoInternoEnt.Temperatura + 2 - 273.15);
                nudFrioSaiMax   = Convert.ToDecimal(trocador.FluidoAnularEnt.Temperatura - 2 - 273.15);

                nudVarFluidoAnularTemp.Minimum    = nudQuenteEntMin;
                nudVarFluidoAnularTemp.Maximum    = nudQuenteEntMax;
                nudVarFluidoAnularTempSai.Minimum = nudQuenteSaiMin;
                nudVarFluidoAnularTempSai.Maximum = nudQuenteSaiMax;

                nudVarFluidoInternoTemp.Minimum    = nudFrioEntMin;
                nudVarFluidoInternoTemp.Maximum    = nudFrioEntMax;
                nudVarFluidoInternoTempSai.Minimum = nudFrioSaiMin;
                nudVarFluidoInternoTempSai.Maximum = nudFrioSaiMax;
            }
            else
            {
                nudQuenteSaiMin = Convert.ToDecimal(trocador.FluidoAnularEnt.Temperatura + 2 - 273.15);
                nudFrioSaiMax   = Convert.ToDecimal(trocador.FluidoInternoEnt.Temperatura - 2 - 273.15);

                nudVarFluidoAnularTemp.Minimum    = nudFrioEntMin;
                nudVarFluidoAnularTemp.Maximum    = nudFrioEntMax;
                nudVarFluidoAnularTempSai.Minimum = nudFrioSaiMin;
                nudVarFluidoAnularTempSai.Maximum = nudFrioSaiMax;

                nudVarFluidoInternoTemp.Minimum    = nudQuenteEntMin;
                nudVarFluidoInternoTemp.Maximum    = nudQuenteEntMax;
                nudVarFluidoInternoTempSai.Minimum = nudQuenteSaiMin;
                nudVarFluidoInternoTempSai.Maximum = nudQuenteSaiMax;
            }

            chartPerdaCarga.ChartAreas[0].AxisX.Minimum  = Convert.ToDouble(nudQuenteSaiMin);
            chartComprimento.ChartAreas[0].AxisX.Minimum = Convert.ToDouble(nudQuenteSaiMin);

            // Coloca os valores nas variaveis dinamicas
            nudVarFluidoInternoTemp.Value    = Convert.ToDecimal(fluidoInternoTemp - 273.15);
            nudVarFluidoInternoTempSai.Value = Convert.ToDecimal(tempInternoSai - 273.15);

            nudVarFluidoAnularTemp.Value    = Convert.ToDecimal(fluidoAnularTemp - 273.15);
            nudVarFluidoAnularTempSai.Value = Convert.ToDecimal(tempAnularSai - 273.15);

            nudVarTrocadorVazaoQuente.Value  = Convert.ToDecimal(vazaoQente * 3600);
            nudTrocadorComprimento.Value     = Convert.ToDecimal(tubulacaoComprimento);
            nudVarTrocadorDiamAnular.Value   = Convert.ToDecimal(tubAnularDiam * 100);
            nudTrocadorDiametroAnular.Value  = Convert.ToDecimal(tubAnularDiam * 100);
            nudVarTrocadorDiamInterno.Value  = Convert.ToDecimal(tubInternaDiam * 100);
            nudTrocadorDiametroInterno.Value = Convert.ToDecimal(tubInternaDiam * 100);

            AtualizaForms();

            atualizaParametros = true;
        }
        /// <summary>
        /// Botão para cálculo inicial do bombeamento
        /// </summary>
        private void btnCalcular_Click(object sender, EventArgs e)
        {
            if (true)
            {
                // -> Fluido
                cmbFluidoNomeTxt        = cmbFluidoNome.Text;
                nudFluidoTemperaturaDbl = Convert.ToDouble(nudFluidoTemperatura.Value) + 273.15; // Temperatura em K
                nudFluidoPressaoDbl     = Convert.ToDouble(nudFluidoPressao.Value) * 1e5;        // Pressão em Pa
                fluido = new FluidoIdealOPIII(InicializadorObjetos.MaterialFluidoOPIII(cmbFluidoNomeTxt), nudFluidoTemperaturaDbl);

                // -> Tubulação de Sucção
                nudTubSucRugosidadeDbl  = Convert.ToDouble(nudTubSucRugosidade.Value) * 1e-3;
                nudTubSucDiametroIntDbl = Convert.ToDouble(nudTubSucDiametroInt.Value) * 1e-2;
                nudTubSucCompSingDbl    = Convert.ToDouble(nudTubSucCompSing.Value);
                singEqvSuc = new Singularidade(nudTubSucCompSingDbl, "Equivalente");
                nudTubSucComprimentoDbl = Convert.ToDouble(nudTubSucComprimento.Value);
                nudTubSucElevacaoDbl    = Convert.ToDouble(nudTubSucElevacao.Value);
                tubulacaoSuccao         = new Tubulacao(nudTubSucDiametroIntDbl, nudTubSucComprimentoDbl, new MaterialTubulacao(nudTubSucRugosidadeDbl), nudTubSucElevacaoDbl, "haaland");
                tubulacaoSuccao.AdicionaSingularidade(singEqvSuc);
                // Valvula da sucção
                valvulaSuc = new Valvula(2, 1000);
                tubulacaoSuccao.AdicionaSingularidade(valvulaSuc);

                // -> Tubulação de Descarga
                nudTubDesRugosidadeDbl  = Convert.ToDouble(nudTubDesRugosidade.Value) * 1e-3;
                nudTubDesDiametroIntDbl = Convert.ToDouble(nudTubDesDiametroInt.Value) * 1e-2;
                nudTubDesCompSingDbl    = Convert.ToDouble(nudTubDesCompSing.Value);
                singEqvDes = new Singularidade(nudTubDesCompSingDbl, "Equivalente");
                nudTubDesComprimentoDbl = Convert.ToDouble(nudTubDesComprimento.Value);
                nudTubDesElevacaoDbl    = Convert.ToDouble(nudTubDesElevacao.Value);
                tubulacaoDescarga       = new Tubulacao(nudTubDesDiametroIntDbl, nudTubDesComprimentoDbl, new MaterialTubulacao(nudTubDesRugosidadeDbl), nudTubDesElevacaoDbl, "haaland");
                tubulacaoDescarga.AdicionaSingularidade(singEqvDes);
                // Valvula da descarga
                valvulaDes = new Valvula(2, 3000);
                tubulacaoDescarga.AdicionaSingularidade(valvulaDes);

                // Bomba
                bomba = new BombaCompleta(new double[3] {
                    0, 0, 0
                }, fluido, tubulacaoSuccao, tubulacaoDescarga, nudFluidoPressaoDbl, 2);

                nudVazaoDesejada.Value        = Convert.ToDecimal(0.5);
                nudAberturaValvulaSuc.Value   = Convert.ToDecimal(1.0);
                nudAberturaValvulaDes.Value   = Convert.ToDecimal(1.0);
                nudFluidoTemperaturaDin.Value = Convert.ToDecimal(nudFluidoTemperaturaDbl - 273.15);
                nudFluidoPressaoDin.Value     = Convert.ToDecimal(nudFluidoPressaoDbl * 1e-5);

                AtualizaHBomba();
                AtualizaNPSHDisp();

                gubFluidoDin.Visible    = true;
                gubSucDin.Visible       = true;
                gubDesDin.Visible       = true;
                chartPerdaCarga.Visible = true;
                chartNPSHDisp.Visible   = true;
                gubResultados.Visible   = true;
                labResultados.Visible   = true;

                tabControl.SelectedIndex = 1;
            }
        }