APÉNDICE D El código del SEPDCA es el siguiente: 'Declaración de Variables y contadores públicos Public constanten2 As Double Public x As Currency Public yinc As Currency Public zinc As Currency Public zinc2 As Currency Public xinc As Currency Public cinc As Currency Public i As Currency Public deltadelaaltura As Double Public deltaaltura1 As Double Public a As Double Public c As Double Public de As Double Public f As Double Public a1 As Double Public c1 As Double Public de1 As Double Public f1 As Double Public Valordm As Double Public ValorQ As Double Public ValorU As Double Public Valorh As Double Public Valory As Double Public contadorcolumnafinal As Integer Public numeromaximo2 As Integer Public Sub Q() Dim Valor1 As Double Valor1 = txtdatos(1) If cbounidades(1).ListIndex = 0 Then q2 = Valor1 * 1 'no se requiere hacer conversion ElseIf cbounidades(1).ListIndex = 1 Then q2 = Valor1 * 0.016666 'conversion de g/min a g/s ElseIf cbounidades(1).ListIndex = 2 Then q2 = Valor1 * 1000 'conversion de Kg/s a g/s ElseIf cbounidades(1).ListIndex = 3 Then q2 = Valor1 * 16.6666 'conversion de Kg/min a g/s ElseIf cbounidades(1).ListIndex = 4 Then q2 = Valor1 * 0.2777 'conversion de Kg/hr a g/s ElseIf cbounidades(1).ListIndex = 5 Then 82 q2 = Valor1 * 253.5923 'conversion de lb/s a g/s ElseIf cbounidades(1).ListIndex = 6 Then q2 = Valor1 * 7.5598 'conversion de lb/min a g/s Else: q2 = Valor1 * 0.126 'conversion de lb/hr a g/s End If ValorQ = q2 End Sub Public Sub optclave1_Click() Dim frm As Dialog2 Set frm = New Dialog2 frm.Show If optelevacion1.Value = 1 Then Dialog2.Visible = True Else Dialog2.Visible = False End If End Sub Public Sub optclave2_DblClick() 'muestra el cuadro de dialogo con un click Dim frm As Dialog1 Set frm = New Dialog1 frm.Show If optclave2.Value = 1 Then Dialog1.Visible = True Else Dialog1.Visible = False End If End Sub Private Sub realizarcalculo_Click() respuesta = MsgBox("Se procesará la información", vbDefaultButton5, " ") Call Genera End Sub Private Sub realizarcalculo2_Click() Call Generaiso End Sub Public Function sigmaz(x, a, c, de, f) As Double 'a, c, d y f se calculan con la función 'anterior sigmaz = (c * x ^ de) + f End Function Public Function sigmay(x, a, c, de, f) As Double 'a, c, d y f se calculan con la función 'anterior sigmay = a * (x ^ 0.894) End Function 83 Public Function fy(yinc, sigmay) As Double fy = Exp(-0.5 * (yinc / sigmay) ^ 2) End Function Public Function Hfinal(Valorh, deltaaltura1) As Currency Hfinal = Valorh + deltaaltura1 End Function Public Function Velsuelo(Hfinal, constanten2, ValorU) As Double 'funcion para determinar la velocidad corregida Velsuelo = ValorU * ((Hfinal / 10) ^ constanten2) '10 m se refiere a la altura del ‘anemómetro End Function Public Sub constanten() clavefinal2 = CStr(txtclavedefinitiva.Text) If clavefinal2 = "A" And cbosuelo.ListIndex = 1 Then constanten1 = 0.1 ElseIf clavefinal2 = "B" And cbosuelo.ListIndex = 1 Then constanten1 = 0.15 ElseIf clavefinal2 = "C" And cbosuelo.ListIndex = 1 Then constanten1 = 0.2 ElseIf clavefinal2 = "D" And cbosuelo.ListIndex = 1 Then constanten1 = 0.25 ElseIf clavefinal2 = "E" And cbosuelo.ListIndex = 1 Then constanten1 = 0.25 ElseIf clavefinal2 = "F" And cbosuelo.ListIndex = 1 Then constanten1 = 0.3 ElseIf clavefinal2 = "A" And cbosuelo.ListIndex = 2 Then constanten1 = 0.15 ElseIf clavefinal2 = "B" And cbosuelo.ListIndex = 2 Then constanten1 = 0.15 ElseIf clavefinal2 = "C" And cbosuelo.ListIndex = 2 Then constanten1 = 0 ElseIf clavefinal2 = "D" And cbosuelo.ListIndex = 2 Then constanten1 = 0.25 ElseIf clavefinal2 = "E" And cbosuelo.ListIndex = 2 Then constanten1 = 0.4 ElseIf clavefinal2 = "F" And cbosuelo.ListIndex = 2 Then constanten1 = 0.6 Else: constanten1 = 0 'considera el caso en el que no se quiere hacer corrección del suelo End If constanten2 = constanten1 End Sub Public Sub deltah() 84 If Form1.optelevacion2.Value = True Then ' considera que no se quiere calcular la elevacion de la pluma deltaaltura = 0 Else: deltaaltura = deltadelaaltura 'se calcula la elevacion de la pluma End If deltaaltura1 = deltaaltura End Sub Public Function zmenosh(sigmaz, Hfinal, zinc) As Double zmenosh = Exp(-0.5 * (((zinc - Hfinal) / sigmaz) ^ 2)) End Function Public Function zmash(sigmaz, Hfinal, zinc) As Double zmash = Exp(-0.5 * (((zinc + Hfinal) / sigmaz) ^ 2)) End Function Public Function cmax(sigmay, sigmaz, Velsuelo, ValorQ) As Double cmax = ((ValorQ / (2 * 3.14159265 * sigmay * sigmaz * Velsuelo))) * 1000000 End Function Public Function zmenoshis(sigmaz2, Hfinal, zinc) As Double zmenoshis = Exp(-0.5 * (((zinc - Hfinal) / sigmaz2) ^ 2)) End Function Public Function zmashis(sigmaz2, Hfinal, zinc) As Double zmashis = Exp(-0.5 * (((zinc + Hfinal) / sigmaz2) ^ 2)) End Function Public Function cmaxis(sigmay2, sigmaz2, Velsuelo, ValorQ) As Double cmaxis = ((ValorQ / (2 * 3.14159265 * sigmay2 * sigmaz2 * Velsuelo))) * 1000000 End Function Public Function valorfinal(cmax, zmenosh, zmash, fy) As Double valorfinal = cmax * fy * (zmenosh + zmash) End Function Public Function ycalculada(cmaxis, zmenoshis, zmashis, sigmay2, maximo) As Double If zmashis = 0 Or zmenoshis = 0 Then ycalculada = -1 Else: ycalculada = -2 * (sigmay2 * sigmay2) * ((Log((maximo) / ((zmashis + zmenoshis) * (cmaxis)))) / (Log(2.718281828))) End If End Function Public Sub Generaiso() 85 Dim f As Integer, c As Integer 'contadores para el msflexgrid pasarlo a texto '-----Dim contadorfila As Integer Dim contadorcolumna As Integer Dim contadormaximo As Integer '------Call dm Call Q Call U Call H Call y Call deltah Call constanten Call contadorcolumnasfinales '------------------------Dim cadena As String Dim cadena1 As String Dim cadena2 As String Dim cadena3 As String Open "C:\valoresx.txt" For Output As #1 Open "C:\valoresy.txt" For Output As #2 Open "C:\valoresz.txt" For Output As #3 '-----------------------Hfinal2 = Hfinal(Valorh, deltaaltura1) clavefinal = CStr(txtclavedefinitiva.Text) renglon = 0 isoconcdusuario = CDbl(isoconcusuario(0).Text) '---contadorcolumna = 0 'inicializo el contador a cero para los valores de z '--------For zinc = 0 To (2 * Hfinal2) Step (2 * Hfinal2 / 20) '-------contadorfila = 0 'inicializo el contador a cero para cada valor de z contadorcolumna = contadorcolumna + 1 contadorcolumna2 = contadorcolumna2 + 1 '-------For xinc = 0.1 To Valordm Step ((Valordm - 0.1) / 500) If clavefinal = "A" And xinc <= 1 Then a1 = 213 c1 = 440.8 de1 = 1.941 86 f1 = 9.27 ElseIf clavefinal = "B" And xinc <= 1 Then a1 = 156 c1 = 106.6 de1 = 1.149 f1 = 3.3 ElseIf clavefinal = "C" And xinc <= 1 Then a1 = 104 c1 = 61 de1 = 0.911 f1 = 0 ElseIf clavefinal = "D" And xinc <= 1 Then a1 = 68 c1 = 33.2 de1 = 0.725 f1 = -1.7 ElseIf clavefinal = "E" And xinc <= 1 Then a1 = 50.5 c1 = 22.8 de1 = 0.678 f1 = -1.3 ElseIf clavefinal = "F" And xinc <= 1 Then a1 = 34 c1 = 14.35 de1 = 0.74 f1 = -0.35 ElseIf clavefinal = "A" And xinc > 1 Then a1 = 213 c1 = 459.7 de1 = 2.094 f1 = -9.6 ElseIf clavefinal = "B" And xinc > 1 Then a1 = 156 c1 = 108.2 de1 = 1.098 f1 = 2 ElseIf clavefinal = "C" And xinc > 1 Then a1 = 104 c1 = 61 de1 = 0.911 f1 = 0 ElseIf clavefinal = "D" And xinc > 1 Then a1 = 68 c1 = 44.5 de1 = 0.516 f1 = -13 ElseIf clavefinal = "E" And xinc > 1 Then a1 = 50.5 87 c1 = 55.4 de1 = 0.305 f1 = -34 Else: a1 = 34 c1 = 62.6 de1 = 0.18 f1 = -48.6 End If SY2 = sigmay2(xinc, a1, c1, de1, f1) SZ2 = sigmaz2(xinc, a1, c1, de1, f1) Hfinal3 = Hfinal(Valorh, deltaaltura1) zmenosh3 = zmenoshis(SZ2, Hfinal3, zinc) zmash3 = zmashis(SZ2, Hfinal3, zinc) Velsuelo3 = Velsuelo(Hfinal3, constanten2, ValorU) cmax3 = cmaxis(SY2, SZ2, Velsuelo3, ValorQ) ycalculada3 = ycalculadausuario(cmax3, zmenosh3, zmash3, SY2, isoconcdusuario) If ycalculada3 < 0 Then ycalc2 = 0 Else: ycalc2 = Sqr(ycalculada3) '--contadorfila = contadorfila + 1 'si existe el valor de y el contador aumenta una unidad '-------------renglon = renglon + 1 Me.MSFlexGrid1(2).Col = 1 ' Posiciona el cursor en la columna 1 Me.MSFlexGrid1(2).Row = renglon ' Posiciona el cursor en el renglón x Me.MSFlexGrid1(2).Text = xinc ' Escribe 'xinc' en la columna 3 y renglon x Me.MSFlexGrid1(2).CellAlignment = flexAlignCenterCenter 'centra el contenido de la celda Me.MSFlexGrid1(2).Col = 2 ' Posiciona el cursor en la columna 2 Me.MSFlexGrid1(2).Row = renglon ' Posiciona el cursor en el renglón Me.MSFlexGrid1(2).Text = ycalc2 ' Escribe el valor de 'ycalculada2' Me.MSFlexGrid1(2).CellAlignment = flexAlignCenterCenter 'centra el contenido de la celda Me.MSFlexGrid1(2).Col = 3 ' Posiciona el cursor en la columna 1 Me.MSFlexGrid1(2).Row = renglon ' Posiciona el cursor en el renglón Me.MSFlexGrid1(2).Text = zinc ' Escribe 'zinc2' en la columna 3 y renglon x Me.MSFlexGrid1(2).CellAlignment = flexAlignCenterCenter 'centra el contenido de la celda Me.MSFlexGrid1(2).Col = 4 ' Posiciona el cursor en la columna 1 Me.MSFlexGrid1(2).Row = renglon ' Posiciona el cursor en el renglón x Me.MSFlexGrid1(2).Text = isoconcdusuario ' Escribe 'maximo' en la columna 3 y renglon x Me.MSFlexGrid1(2).CellAlignment = flexAlignCenterCenter 'centra el contenido de la celda '---- 88 Me.MSFlexGrid4.Col = contadorcolumna ' Posiciona el cursor en la columna Me.MSFlexGrid4.Row = contadorfila ' Posiciona el cursor en el renglón x Me.MSFlexGrid4.Text = xinc ' Escribe 'zinc' en la columna 3 y renglon '----Me.MSFlexGrid5.Col = contadorcolumna ' Posiciona el cursor en la columna Me.MSFlexGrid5.Row = contadorfila ' Posiciona el cursor en el renglón x Me.MSFlexGrid5.Text = ycalc2 ' Escribe 'zinc' en la columna 3 y renglon '----Me.MSFlexGrid6.Col = contadorcolumna ' Posiciona el cursor en la columna Me.MSFlexGrid6.Row = contadorfila ' Posiciona el cursor en el renglón x Me.MSFlexGrid6.Text = zinc ' Escribe 'zinc' en la columna 3 y renglon End If Next xinc ReDim Preserve columnas(contadorcolumna) columnas(contadorcolumna) = contadorfila Next zinc Call rellenar For f = 1 To MSFlexGrid4.Rows - 1 cadena = "" 'esto es para estar seguro que cadena queda en blanco For c = 1 To MSFlexGrid4.Cols - 1 cadena = cadena & " " & MSFlexGrid4.TextMatrix(f, c) Next c Print #1, cadena Next f Close #1 For f = 1 To MSFlexGrid5.Rows - 1 cadena1 = "" 'esto es para estar seguro que cadena queda en blanco For c = 1 To MSFlexGrid5.Cols - 1 cadena1 = cadena1 & " " & MSFlexGrid5.TextMatrix(f, c) Next c Print #2, cadena1 Next f Close #2 For f = 1 To MSFlexGrid6.Rows - 1 cadena2 = "" 'esto es para estar seguro que cadena queda en blanco For c = 1 To MSFlexGrid6.Cols - 1 cadena2 = cadena2 & " " & MSFlexGrid6.TextMatrix(f, c) Next c Print #3, cadena2 Next f Close #3 89 respuesta1 = MsgBox("Los cálculos se han realizado satisfactoriamente", vbDefaultButton5, " ") End Sub Public Function ycalculadausuario(cmaxis, zmenoshis, zmashis, sigmay2, isoconcdusuario) As Double If zmashis = 0 Or zmenoshis = 0 Then ycalculadausuario = -1 Else: ycalculadausuario = -2 * (sigmay2 * sigmay2) * ((Log((isoconcdusuario) / ((zmashis + zmenoshis) * (cmaxis)))) / (Log(2.718281828))) End If End Function Private Sub CancelButton_Click() Unload Me End Sub Public Sub OKButton_Click() Dim claveopt1 As String If cboclave.ListIndex = 0 Then claveopt1 = "A" ElseIf cboclave.ListIndex = 1 Then claveopt1 = "B" ElseIf cboclave.ListIndex = 2 Then claveopt1 = "C" ElseIf cboclave.ListIndex = 3 Then claveopt1 = "D" ElseIf cboclave.ListIndex = 4 Then claveopt1 = "E" Else: claveopt1 = "F" End If Form1.txtclavedefinitiva = claveopt1 Unload Me End Sub Public Index As Integer Public categoria1 As String Public condiciones As String Private Sub CancelButton_Click() ' esto no ejecuta ninguna validación 90 Unload Me End Sub Public Sub Condicion() If optDía.Value = True And cbocondiciones(0).ListIndex = 0 Then Valores = "aa" 'se selecciona la opción:Día, Fuerte ElseIf optDía.Value = True And cbocondiciones(0).ListIndex = 1 Then Valores = "bb" 'se selecciona la opcion:Día, Moderada ElseIf optDía.Value = True And cbocondiciones(0).ListIndex = 2 Then Valores = "cc" 'se selecciona la opción: Día, Ligera ElseIf optNoche.Value = True And cbocondiciones(1).ListIndex = 0 Then Valores = "dd" 'se selecciona la opcion: Noche, en su mayoria nublado Else: Valores = "ee" 'se selecciona: Noche, despejado End If condiciones = Valores End Sub Public Sub Rangovel() Call Form1.U If Form1.ValorU <= 2 Then Index1 = 0 ElseIf Form1.ValorU > 2 And Form1.ValorU <= 3 Then Index1 = 1 ElseIf Form1.ValorU > 3 And Form1.ValorU <= 5 Then Index1 = 2 ElseIf Form1.ValorU > 5 And Form1.ValorU <= 6 Then Index1 = 3 Else: Index1 = 4 End If Index = Index1 End Sub Public Sub Categorias() Call Rangovel Call Condicion If Index = 0 And condiciones = "aa" Then categoria = "A" ElseIf Index = 1 And condiciones = "aa" Then categoria = "A" ElseIf Index = 2 And condiciones = "aa" Then categoria = "B" ElseIf Index = 3 And condiciones = "aa" Then categoria = "C" ElseIf Index = 4 And condiciones = "aa" Then categoria = "C" ElseIf Index = 0 And condiciones = "bb" Then categoria = "A" ElseIf Index = 1 And condiciones = "bb" Then 91 categoria = "B" ElseIf Index = 2 And condiciones = "bb" Then categoria = "B" ElseIf Index = 3 And condiciones = "bb" Then categoria = "C" ElseIf Index = 4 And condiciones = "bb" Then categoria = "D" ElseIf Index = 0 And condiciones = "cc" Then categoria = "B" ElseIf Index = 1 And condiciones = "cc" Then categoria = "C" ElseIf Index = 2 And condiciones = "cc" Then categoria = "C" ElseIf Index = 3 And condiciones = "cc" Then categoria = "D" ElseIf Index = 4 And condiciones = "cc" Then categoria = "D" ElseIf Index = 0 And condiciones = "dd" Then categoria = "E" ElseIf Index = 1 And condiciones = "dd" Then categoria = "E" ElseIf Index = 2 And condiciones = "dd" Then categoria = "D" ElseIf Index = 3 And condiciones = "dd" Then categoria = "D" ElseIf Index = 4 And condiciones = "dd" Then categoria = "D" ElseIf Index = 0 And condiciones = "ee" Then categoria = "F" ElseIf Index = 1 And condiciones = "ee" Then categoria = "F" ElseIf Index = 2 And condiciones = "ee" Then categoria = "E" ElseIf Index = 3 And condiciones = "ee" Then categoria = "D" Else: categoria = "D" End If categoria1 = categoria End Sub Public Sub OKButton_Click() Call Categorias Form1.txtclavedefinitiva = categoria1 Unload Me End Sub 92 Public Sub optDía_Click() cbocondiciones(0).Enabled = True 'activa el combo correspondiente a la opcion de dia cbocondiciones(1).Enabled = False 'desactiva el combo correspondiente a la opción de noche End Sub Public Sub optNoche_Click() cbocondiciones(1).Enabled = True 'activa el combo correspondiente a la opcion de noche cbocondiciones(0).Enabled = False 'desactiva el combo correspondiente a la opcion de día End Sub Public ValorVs As Double Public ValorD As Double Public ValorTs As Double Public ValorTa As Double Public ValorP As Double Public Sub Vs() Dim param As Double param = txtdatos2(0) If cbounidades2(0).ListIndex = 0 Then Vs2 = param * 1 'no se requiere hacer conversion ElseIf cbounidades2(0).ListIndex = 1 Then Vs2 = param * 0.0254 'conversion de in/s a m/s ElseIf cbounidades2(0).ListIndex = 2 Then Vs2 = param * 0.00042333 'conversion de in/min a m/s ElseIf cbounidades2(0).ListIndex = 3 Then Vs2 = param * 0.0000070555 'conversion de in/hr a m/s ElseIf cbounidades2(0).ListIndex = 4 Then Vs2 = param * 0.3048 'conversion de ft/s a m/s ElseIf cbounidades2(0).ListIndex = 5 Then Vs2 = param * 0.00508 'conversion de ft/min a m/s ElseIf cbounidades2(0).ListIndex = 6 Then Vs2 = param * 0.000084666 'conversion de ft/hr a m/s ElseIf cbounidades2(0).ListIndex = 7 Then Vs2 = param * 1000 'conversion de Km/s a m/s ElseIf cbounidades2(0).ListIndex = 8 Then Vs2 = param * 16.666 'conversion de Km/min a m/s ElseIf cbounidades2(0).ListIndex = 9 Then Vs2 = param * 0.2777 'conversion de Km/hr a m/s Else: Vs2 = param * 2 'conversion de MPH a m/s End If ValorVs = Vs2 End Sub 93 Public Function capacidad(ValorTs, ValorTa) As Double capacidad = ((28.11 * (ValorTs - ValorTa)) + (0.0009835 * ((ValorTs ^ 2) (ValorTa ^ 2))) + (0.00000160066 * ((ValorTs ^ 3) - (ValorTa ^ 3))) (0.0000000004915 * ((ValorTs ^ 4) - (ValorTa ^ 4)))) / 28.97 End Function Public Function flujo(ValorD, ValorVs, ValorP, ValorTs) As Double flujo = (3.141592 * (ValorD ^ 2) * ValorVs * ValorP) / (4 * 0.287 * ValorTs) End Function Public Function calor(capacidad, flujo) As Double calor = flujo * capacidad End Function Public Function elevacion(ValorVs, ValorP, ValorD, ValorU, ValorTs, ValorTa, calor) As Double If cbocorrelacion.ListIndex = 0 Then elevacion = ((-0.029 * ValorVs * ValorD) / Form1.ValorU) + (2.62 * ((calor ^ (1 / 2)) / Form1.ValorU)) 'calculo para carson y moses ElseIf cbocorrelacion.ListIndex = 1 Then elevacion = (ValorVs * ValorD / Form1.ValorU) * (1.5 + ((0.0096 * calor) / (ValorVs * ValorD))) 'calculo para holland Else: elevacion = 4.71 * (calor ^ 0.444) / (Form1.ValorU ^ 0.694) 'calculo para Concawe End If End Function Public Sub ApplyBottom_Click() Call Ts Call Ta Call D Call Vs Call P Call Form1.U capacidad2 = capacidad(ValorTs, ValorTa) flujo2 = flujo(ValorD, ValorVs, ValorP, ValorTs) calor2 = calor(capacidad2, flujo2) elevacion2 = elevacion(ValorVs, ValorP, ValorD, ValorU, ValorTs, ValorTa, calor2) txtdatos2(7) = capacidad2 txtdatos2(6) = flujo2 txtdatos2(5) = calor2 txtelevacion(11) = elevacion2 End Sub 94