Pārlūkot izejas kodu

Casos peq + bidir + si y solo si - sismo

dacowars 1 mēnesi atpakaļ
vecāks
revīzija
51a87e5b89
1 mainītis faili ar 201 papildinājumiem un 66 dzēšanām
  1. 201 66
      Comb_acciones.py

+ 201 - 66
Comb_acciones.py

@@ -10,6 +10,30 @@ import math
 import numpy as np
 
 
+
+# Print iterations progress
+def printProgressBar (iteration, total, prefix = '', suffix = '', decimals = 1, length = 100, fill = '█', printEnd = "\r"):
+    """
+    Call in a loop to create terminal progress bar
+    @params:
+        iteration   - Required  : current iteration (Int)
+        total       - Required  : total iterations (Int)
+        prefix      - Optional  : prefix string (Str)
+        suffix      - Optional  : suffix string (Str)
+        decimals    - Optional  : positive number of decimals in percent complete (Int)
+        length      - Optional  : character length of bar (Int)
+        fill        - Optional  : bar fill character (Str)
+        printEnd    - Optional  : end character (e.g. "\r", "\r\n") (Str)
+    """
+    percent = ("{0:." + str(decimals) + "f}").format(100 * (iteration / float(total)))
+    filledLength = int(length * iteration // total)
+    bar = fill * filledLength + '-' * (length - filledLength)
+    print(f'\r{prefix} |{bar}| {percent}% {suffix}', end = printEnd)
+    # Print New Line on Complete
+    if iteration == total: 
+        print()
+
+
 #diccionario donde se encuentran todos los coef de comb acciones de las normas
 normas = {
     "IAPF" : {
@@ -145,14 +169,14 @@ def borrar_combos_existentes():
     if comboNames[0] > 0:
         for name in comboNames[1]:
             ret = SapModel.RespCombo.Delete(name)
-        print(f"Se han eliminado {comboNames[0]} combinaciones de respuesta.")
+            printProgressBar(comboNames[1].index(name)+1, comboNames[0], prefix = 'Borrando combinaciones existentes:', suffix = 'Completado', length = 50)
 
 def borrar_load_cases():
     case_names = SapModel.LoadCases.GetNameList()
     if case_names[0] > 0:
         for name in case_names[1]:
             ret = SapModel.LoadCases.Delete(name)
-        print(f"Se han eliminado {case_names[0]} casos de carga.")
+            printProgressBar(case_names[1].index(name)+1, case_names[0], prefix = 'Borrando casos de carga existentes:', suffix = 'Completado', length = 50)
 
 
 def borrar_patrones_carga():
@@ -160,7 +184,7 @@ def borrar_patrones_carga():
     if patternNames[0] > 0:
         for name in patternNames[1]:
             ret = SapModel.LoadPatterns.Delete(name)
-        print(f"Se han eliminado {patternNames[0]} patrones de carga.")
+            printProgressBar(patternNames[1].index(name)+1, patternNames[0], prefix = 'Borrando patrones de carga existentes:', suffix = 'Completado', length = 50)
 
 
 respuesta = input("¿Deseas borrar todos las combinaciones existentes? (Y/n): ")
@@ -182,6 +206,7 @@ if respuesta.lower() == 'y' or len(respuesta) == 0:
 else: "IAP"
 
 
+
 #Extraccion de datos del excel
 
 
@@ -278,9 +303,8 @@ def validar_combinacion(comb, patrones, compatibilidad_df, restricciones_df):
     restriccion = restricciones_df.loc[:,"Si y solo si"]           
     for iter, res in enumerate(restriccion):
         if res:
-            if comb[iter]:
-                idx = patrones.index(res)
-                if not(comb[idx]):
+            idx = patrones.index(res)
+            if comb[iter] and not comb[idx]:
                     return False
     #comprueba que las cargas especificadas como permanentes se encuentran en este caso de carga
     permanentes = restricciones_df.loc[:,"Permanentes"]
@@ -303,7 +327,7 @@ def validar_combinacion(comb, patrones, compatibilidad_df, restricciones_df):
     for iter, sis in enumerate(sismo):
         if sis == "Sismo":
             if comb[iter]:
-                for jter in comb:
+                for jter, _ in enumerate(comb):
                     if restricciones_df.loc[jter,"Tipo"] == "Variable":
                         num_var += 1
                         if num_var > 1:
@@ -420,7 +444,7 @@ for combo in combinaciones_validas:
                         coeficientes_ELSF[i] = normas["IAPF"]["ELS"]["Favorable"]["Persistente"]["NoCte"]
                         coeficientes_ELSCP[i] = normas["IAPF"]["ELS"]["Favorable"]["Persistente"]["NoCte"]
             elif restricciones_df.loc[i,"Tipo"] == "Accidental":
-                if combo[i] == 1: n_acc += 1
+                if combo[i] != 0: n_acc += 1
                 if restricciones_df.loc[i,"Direccion"] == "Desfavorable":
                     #ELU
                     coeficientes_ELUP[i] = 0
@@ -440,7 +464,7 @@ for combo in combinaciones_validas:
                     coeficientes_ELSF[i] =  0
                     coeficientes_ELSCP[i] = 0
             elif restricciones_df.loc[i,"Tipo"] == "Variable":
-                if combo[i] == 1: n_var += 1
+                if combo[i] != 0: n_var += 1
                 if restricciones_df.loc[i,"Direccion"] == "Desfavorable":
                     #ELU
                     coeficientes_ELUP[i] = normas["IAPF"]["ELU"]["Desfavorable"]["Persistente"]["Variable"]
@@ -470,55 +494,82 @@ for combo in combinaciones_validas:
     minorados_ELSF.clear()
     minorados_ELSCP.clear()
 
-    if n_var == 1:
-        coef_var_ELSF = np.ones(len(patrones))
-        coef_var_ELSCP = np.ones(len(patrones))
-        for i in range(len(combo)):
-            if restricciones_df.loc[i,"Tipo"] == "Variable":
-                if restricciones_df.loc[i,"Accion IAPF"] == "Trafico":
-                    coef_var_ELSF[i] = normas["IAPF"]["CoefVar"]["Trafico"]["psi1"][vias_cargadas if int(vias_cargadas) < 4 else "3"]
-                    coef_var_ELSCP[i] = normas["IAPF"]["CoefVar"]["Trafico"]["psi2"]
-                else:
-                    coef_var_ELSF[i] = normas["IAPF"]["CoefVar"]["Resto"]["psi1"]
-                    coef_var_ELSCP[i] = normas["IAPF"]["CoefVar"]["Resto"]["psi2"]
-
-
-    while n_var > 1:
-        minorados_ELUP.clear()
-        minorados_ELSC.clear()
-        minorados_ELSF.clear()
-        minorados_ELSCP.clear()
-        n_var -= 1 
-        #se busca la primera variable en el combo y se asigna el coeficiente
+
+    if n_acc:
+        coef_var_ELUS = np.ones(len(patrones))
+        coef_var_ELUA = np.ones(len(patrones))
         for i in range(len(combo)):
-            coef_var_ELUP = np.ones(len(patrones))
-            coef_var_ELSC = np.ones(len(patrones))
-            coef_var_ELSF = np.ones(len(patrones))
-            coef_var_ELSCP = np.ones(len(patrones))
-            if restricciones_df.loc[i,"Tipo"] == "Variable":
-                if restricciones_df.loc[i,"Accion IAPF"] == "Trafico":
-                    coef_var_ELSF[i] = normas["IAPF"]["CoefVar"]["Trafico"]["psi1"][vias_cargadas if int(vias_cargadas) < 4 else "3"]
-                    coef_var_ELSCP[i] = normas["IAPF"]["CoefVar"]["Trafico"]["psi2"]
-                else:
-                    coef_var_ELSF[i] = normas["IAPF"]["CoefVar"]["Resto"]["psi1"]
-                    coef_var_ELSCP[i] = normas["IAPF"]["CoefVar"]["Resto"]["psi2"]
+            if (restricciones_df.loc[i,"Accion IAPF"] == "Sismo") and combo[i] != 0:
                 for j in range(len(combo)):
-                    if (restricciones_df.loc[j,"Tipo"] == "Variable") and (j != i):
-                            #se asigna el coeficiente de la variable al resto de variables
+                    if (restricciones_df.loc[j,"Tipo"] == "Variable") and j:
                         if restricciones_df.loc[j,"Accion IAPF"] == "Trafico":
-                            coef_var_ELUP[j] = normas["IAPF"]["CoefVar"]["Trafico"]["psi0"]
-                            coef_var_ELSC[j] = normas["IAPF"]["CoefVar"]["Trafico"]["psi0"]
-                            coef_var_ELSF[j] = normas["IAPF"]["CoefVar"]["Trafico"]["psi2"]
-                            coef_var_ELSCP[j] = normas["IAPF"]["CoefVar"]["Trafico"]["psi2"]
+                            coef_var_ELUS[j] = normas["IAPF"]["CoefVar"]["Trafico"]["psi2"]
+                        if restricciones_df.loc[j,"Accion IAPF"] == "Resto":
+                            coef_var_ELUS[j] = normas["IAPF"]["CoefVar"]["Resto"]["psi2"]
+                minorados_ELUS.append(coef_var_ELUS)
+            if (restricciones_df.loc[i,"Accion IAPF"] != "Sismo") and (restricciones_df.loc[i,"Tipo"] == "Accidental") and combo[i] != 0:
+                for k in range(len(combo)):
+                    coef_var_ELUA = np.ones(len(patrones))
+                    if restricciones_df.loc[k,"Tipo"] == "Variable":
+                        if restricciones_df.loc[k,"Accion IAPF"] == "Trafico":
+                            coef_var_ELUA[k] = normas["IAPF"]["CoefVar"]["Trafico"]["psi1"][vias_cargadas if int(vias_cargadas) < 4 else "3"]
                         else:
-                            coef_var_ELUP[j] = normas["IAPF"]["CoefVar"]["Resto"]["psi0"]
-                            coef_var_ELSC[j] = normas["IAPF"]["CoefVar"]["Resto"]["psi0"]
-                            coef_var_ELSF[j] = normas["IAPF"]["CoefVar"]["Resto"]["psi2"]
-                            coef_var_ELSCP[j] = normas["IAPF"]["CoefVar"]["Resto"]["psi2"]
-                        minorados_ELUP.append(coef_var_ELUP)
-                        minorados_ELSC.append(coef_var_ELSC)
-                        minorados_ELSF.append(coef_var_ELSF)
-                        minorados_ELSCP.append(coef_var_ELSCP)
+                            coef_var_ELUA[k] = normas["IAPF"]["CoefVar"]["Resto"]["psi1"]
+                        for j in range(len(combo)):
+                            if (restricciones_df.loc[j,"Tipo"] == "Variable") and (j != k):
+                                    #se asigna el coeficiente de la variable al resto de variables
+                                if restricciones_df.loc[j,"Accion IAPF"] == "Trafico":
+                                    coef_var_ELUA[j] = normas["IAPF"]["CoefVar"]["Trafico"]["psi2"]
+                                else:
+                                    coef_var_ELUA[j] = normas["IAPF"]["CoefVar"]["Resto"]["psi2"]
+                        minorados_ELUP.append(coef_var_ELUA)
+
+    else:
+        if n_var == 1:
+            coef_var_ELSF = np.ones(len(patrones))
+            coef_var_ELSCP = np.ones(len(patrones))
+            for i in range(len(combo)):
+                if (restricciones_df.loc[i,"Tipo"] == "Variable") and combo[i] != 0:
+                    if restricciones_df.loc[i,"Accion IAPF"] == "Trafico":
+                        coef_var_ELSF[i] = normas["IAPF"]["CoefVar"]["Trafico"]["psi1"][vias_cargadas if int(vias_cargadas) < 4 else "3"]
+                        coef_var_ELSCP[i] = normas["IAPF"]["CoefVar"]["Trafico"]["psi2"]
+                    else:
+                        coef_var_ELSF[i] = normas["IAPF"]["CoefVar"]["Resto"]["psi1"]
+                        coef_var_ELSCP[i] = normas["IAPF"]["CoefVar"]["Resto"]["psi2"]
+
+
+        while n_var > 1:
+            n_var -= 1 
+            #se busca la primera variable en el combo y se asigna el coeficiente
+            for i in range(len(combo)):
+                coef_var_ELUP = np.ones(len(patrones))
+                coef_var_ELSC = np.ones(len(patrones))
+                coef_var_ELSF = np.ones(len(patrones))
+                coef_var_ELSCP = np.ones(len(patrones))
+                if (restricciones_df.loc[i,"Tipo"] == "Variable") and combo[i] != 0:
+                    if restricciones_df.loc[i,"Accion IAPF"] == "Trafico":
+                        coef_var_ELSF[i] = normas["IAPF"]["CoefVar"]["Trafico"]["psi1"][vias_cargadas if int(vias_cargadas) < 4 else "3"]
+                        coef_var_ELSCP[i] = normas["IAPF"]["CoefVar"]["Trafico"]["psi2"]
+                    else:
+                        coef_var_ELSF[i] = normas["IAPF"]["CoefVar"]["Resto"]["psi1"]
+                        coef_var_ELSCP[i] = normas["IAPF"]["CoefVar"]["Resto"]["psi2"]
+                    for j in range(len(combo)):
+                        if (restricciones_df.loc[j,"Tipo"] == "Variable") and (j != i):
+                                #se asigna el coeficiente de la variable al resto de variables
+                            if restricciones_df.loc[j,"Accion IAPF"] == "Trafico":
+                                coef_var_ELUP[j] = normas["IAPF"]["CoefVar"]["Trafico"]["psi0"]
+                                coef_var_ELSC[j] = normas["IAPF"]["CoefVar"]["Trafico"]["psi0"]
+                                coef_var_ELSF[j] = normas["IAPF"]["CoefVar"]["Trafico"]["psi2"]
+                                coef_var_ELSCP[j] = normas["IAPF"]["CoefVar"]["Trafico"]["psi2"]
+                            else:
+                                coef_var_ELUP[j] = normas["IAPF"]["CoefVar"]["Resto"]["psi0"]
+                                coef_var_ELSC[j] = normas["IAPF"]["CoefVar"]["Resto"]["psi0"]
+                                coef_var_ELSF[j] = normas["IAPF"]["CoefVar"]["Resto"]["psi2"]
+                                coef_var_ELSCP[j] = normas["IAPF"]["CoefVar"]["Resto"]["psi2"]
+                    minorados_ELUP.append(coef_var_ELUP)
+                    minorados_ELSC.append(coef_var_ELSC)
+                    minorados_ELSF.append(coef_var_ELSF)
+                    minorados_ELSCP.append(coef_var_ELSCP)
 
     
     if minorados_ELUP:
@@ -535,23 +586,42 @@ for combo in combinaciones_validas:
         combos_ELSC.append(np.multiply(coeficientes_ELSC, combo))
         combos_ELSF.append(np.multiply(coeficientes_ELSF, combo))if not n_var else combos_ELSF.append(np.multiply(np.multiply(coeficientes_ELSF, combo),coef_var_ELSF))
         combos_ELSCP.append(np.multiply(coeficientes_ELSCP, combo)) if not n_var else combos_ELSCP.append(np.multiply(np.multiply(coeficientes_ELSCP, combo),coef_var_ELSCP))
+    if minorados_ELUS:
+        for minorado in minorados_ELUS:
+            combos_ELUS.append(np.multiply(np.multiply(coeficientes_ELUS, combo),minorado))
+    if minorados_ELUA:
+        for minorado in minorados_ELUA:
+            combos_ELUA.append(np.multiply(np.multiply(coeficientes_ELUA, combo),minorado))
+    
 
 
 combos_ELUP = np.unique(np.array(combos_ELUP), axis=0)
+combos_ELUA =  np.unique(np.array(combos_ELUA), axis=0)
+combos_ELUS =  np.unique(np.array(combos_ELUS), axis=0)
 combos_ELSC =  np.unique(np.array(combos_ELSC), axis=0)
 combos_ELSF =  np.unique(np.array(combos_ELSF), axis=0)
 combos_ELSCP =  np.unique(np.array(combos_ELSCP), axis=0)
 
 print("------------------------------------------------")
 print(combos_ELUP)
+print(len(combos_ELUP))
+print("------------------------------------------------")
+print(combos_ELUA)
+print(len(combos_ELUA))
+print("------------------------------------------------")
+print(combos_ELUS)
+print(len(combos_ELUS))
 print("------------------------------------------------")
 print(combos_ELSC)
+print(len(combos_ELSC))
 print("------------------------------------------------")
 print(combos_ELSF)
+print(len(combos_ELSF))
 print("------------------------------------------------")
 print(combos_ELSCP)
+print(len(combos_ELSCP))
 
-
+total_combos = len(combos_ELUP) + len(combos_ELSC) + len(combos_ELSF) + len(combos_ELSCP) + len(combos_ELUA) + len(combos_ELUS)
 #creacion de los combos en SAP2000
 
 #creacion de los combos ELU Permantentes
@@ -565,10 +635,38 @@ for combo in combos_ELUP:
         coeficiente = combo[idx]
         if coeficiente != 0:
             ret = SapModel.RespCombo.SetCaseList(combo_name, 0, patron, coeficiente)
+    printProgressBar(combo_num, total_combos, prefix = 'Creando combos ELU Persistente:', suffix = 'Completado', length = 50)
     combo_num += 1
 
-#creacion de los combos ELS Caracteristico
+#creacion de los combos ELU Accidentales
+tot = combo_num
+combo_num = 0 
+
+for combo in combos_ELUA:
+    combo_name = "ELU_ACC_{:03d}".format(combo_num)
+    ret = SapModel.RespCombo.Add(combo_name, 0)
+    for idx, patron in enumerate(patrones):
+        coeficiente = combo[idx]
+        if coeficiente != 0:
+            ret = SapModel.RespCombo.SetCaseList(combo_name, 0, patron, coeficiente)
+    printProgressBar(combo_num, total_combos, prefix = 'Creando combos ELU Accidental:', suffix = 'Completado', length = 50)
+    combo_num += 1
 
+#creacion de los combos ELU Sismo
+tot += combo_num
+combo_num = 0
+for combo in combos_ELUS:
+    combo_name = "ELU_SIS_{:03d}".format(combo_num)
+    ret = SapModel.RespCombo.Add(combo_name, 0)
+    for idx, patron in enumerate(patrones):
+        coeficiente = combo[idx]
+        if coeficiente != 0:
+            ret = SapModel.RespCombo.SetCaseList(combo_name, 0, patron, coeficiente)
+    printProgressBar(tot+combo_num, total_combos, prefix = 'Creando combos ELU Sismo:', suffix = 'Completado', length = 50) 
+    combo_num += 1
+
+#creacion de los combos ELS Caracteristico
+tot += combo_num
 combo_num = 0 
 
 for combo in combos_ELSC:
@@ -578,10 +676,11 @@ for combo in combos_ELSC:
         coeficiente = combo[idx]
         if coeficiente != 0:
             ret = SapModel.RespCombo.SetCaseList(combo_name, 0, patron, coeficiente)
+    printProgressBar(tot+combo_num, total_combos, prefix = 'Creando combos ELS Caracteristico:', suffix = 'Completado', length = 50) 
     combo_num += 1
 
 #creacion de los combos ELS Frecuente
-
+tot += combo_num
 combo_num = 0 
 
 for combo in combos_ELSF:
@@ -591,10 +690,11 @@ for combo in combos_ELSF:
         coeficiente = combo[idx]
         if coeficiente != 0:
             ret = SapModel.RespCombo.SetCaseList(combo_name, 0, patron, coeficiente)
+    printProgressBar(tot+combo_num, total_combos, prefix = 'Creando combos ELS Frecuente:', suffix = 'Completado', length = 50)
     combo_num += 1
 
 #creacion de los combos ELS Cuasi Permanente
-
+tot += combo_num
 combo_num = 0 
 
 for combo in combos_ELSCP:
@@ -604,9 +704,11 @@ for combo in combos_ELSCP:
         coeficiente = combo[idx]
         if coeficiente != 0:
             ret = SapModel.RespCombo.SetCaseList(combo_name, 0, patron, coeficiente)
+    printProgressBar(tot+combo_num, total_combos, prefix = 'Creando combos ELS Cuasipermanente:', suffix = 'Completado', length = 50)
     combo_num += 1
-
+printProgressBar(total_combos, total_combos, prefix = 'Creando combos ELS Cuasipermanente:', suffix = 'Completado', length = 50)
 #creacion del combo envolvente 
+print()
 
 
 combo_name = "1. ENV ELU P"
@@ -615,34 +717,67 @@ comboNames = SapModel.RespCombo.GetNameList()
 patron = []
 for i in range(comboNames[0]):
     if "ELU_P" in comboNames[1][i]: patron.append(comboNames[1][i])  
-for name in patron:
+for i, name in enumerate(patron):
     ret = SapModel.RespCombo.SetCaseList(combo_name, 1, name, 1)
+    printProgressBar(i+1, comboNames[0], prefix = 'Creando combo envolvente ELU P:', suffix = 'Completado', length = 50)
+n=i
 
-combo_name = "2. ENV ELS C"
+combo_name = "2. ENV ELU ACC"
+ret = SapModel.RespCombo.Add(combo_name, 1)
+comboNames = SapModel.RespCombo.GetNameList()
+patron = []
+for i in range(comboNames[0]):
+    if "ELU_ACC" in comboNames[1][i]: patron.append(comboNames[1][i])  
+for i, name in enumerate(patron):
+    ret = SapModel.RespCombo.SetCaseList(combo_name, 1, name, 1)
+    printProgressBar(i+1, comboNames[0], prefix = 'Creando combo envolvente ELU ACC:', suffix = 'Completado', length = 50)
+n=i
+
+combo_name = "3. ENV ELU SIS"
+ret = SapModel.RespCombo.Add(combo_name, 1)
+comboNames = SapModel.RespCombo.GetNameList()
+patron = []
+for i in range(comboNames[0]):
+    if "ELU_SIS" in comboNames[1][i]: patron.append(comboNames[1][i])  
+for i, name in enumerate(patron):
+    ret = SapModel.RespCombo.SetCaseList(combo_name, 1, name, 1)
+    printProgressBar(i+1, comboNames[0], prefix = 'Creando combo envolvente ELU ACC:', suffix = 'Completado', length = 50)
+n=i
+
+combo_name = "4. ENV ELS C"
 ret = SapModel.RespCombo.Add(combo_name, 1)
 comboNames = SapModel.RespCombo.GetNameList()
 patron = []
 for i in range(comboNames[0]):
     if "ELS_C_" in comboNames[1][i]: patron.append(comboNames[1][i])  
-for name in patron:
+for i, name in enumerate(patron):
     ret = SapModel.RespCombo.SetCaseList(combo_name, 1, name, 1)
+    printProgressBar(n+i+1, comboNames[0], prefix = 'Creando combo envolvente ELS C:', suffix = 'Completado', length = 50)
+n+=i   
 
 
-combo_name = "3. ENV ELS F"
+combo_name = "5. ENV ELS F"
 ret = SapModel.RespCombo.Add(combo_name, 1)
 comboNames = SapModel.RespCombo.GetNameList()
 patron = []
 for i in range(comboNames[0]):
     if "ELS_F_" in comboNames[1][i]: patron.append(comboNames[1][i])  
-for name in patron:
+for i, name in enumerate(patron):
     ret = SapModel.RespCombo.SetCaseList(combo_name, 1, name, 1)
+    printProgressBar(n+i+1, comboNames[0], prefix = 'Creando combo envolvente ELS F:', suffix = 'Completado', length = 50)
+n+=i
+    
 
-combo_name = "4. ENV ELS CP"
+combo_name = "6. ENV ELS CP"
 ret = SapModel.RespCombo.Add(combo_name, 1)
 comboNames = SapModel.RespCombo.GetNameList()
 patron = []
 for i in range(comboNames[0]):
     if "ELS_CP" in comboNames[1][i]: patron.append(comboNames[1][i])  
-for name in patron:
+for i, name in enumerate(patron):
     ret = SapModel.RespCombo.SetCaseList(combo_name, 1, name, 1)
+    printProgressBar(n+i+1, comboNames[0], prefix = 'Creando combo envolvente ELS CP:', suffix = 'Completado', length = 50)
+printProgressBar(comboNames[0], comboNames[0], prefix = 'Creando combo envolvente ELS CP:', suffix = 'Completado', length = 50)
 
+print()
+print("Combinaciones de acciones creadas con éxito.")