velazquezr35 / eigpp

1 stars 0 forks source link

sobre eigpp - planteo de cambios & limpieza #26

Closed velazquezr35 closed 2 years ago

velazquezr35 commented 2 years ago

Profe,

Abro este issue para dejar nota del proceso de organización y limpieza del archivo eigpp y discutir los cambios.

Creo que las funciones que están en el archivo (última versión en el repo) están 'obsoletas'. Voy por partes:

1) rd_data:

    #If raw
    if case.stru.struRdOpt == 'raw':
        case = sim_db.check_BN_files(case, **kwargs) #NOTA: Ver si usar un nombre loc o cambiarlo en case

        #Check if available:
        ##NOTA: Ahora desde una función, para ahorrar líneas
        sim_db.check_case_attris(case) #Esto debería imprimir alertas si falta algo

        case.stru = sim_db.rd_rawRespData(case.stru, **kwargs)
        sim_db.svBin(case, **kwargs)
        if glob_print_output:
            print("Raw response data read")

    #elif from bin file
    elif case.stru.struRdOpt == 'bin':
        if case.fName == '':
            print('Warning: fName empty!') ##NOTA: Esto podría hacerse con un 'kit' de opciones a verificar desde check_attris
        temp_case = sim_db.rdBin(case.fName, **kwargs) # expects "sim" class object
        case = sim_db.update_BN_objs(case, temp_case, **kwargs) #Se compara y actualiza para no perder info
        if type(case) != sim_db.sim: ##NOTA: Idem
            print('Warning: Not a sim class obj')
        if glob_print_output:
            print("Response data read from binary preprocessed file")

Lo anterior es obsoleto en el sentido de que con los últimos enfoques, inicialmente se genera la info y se la exporta (svBin) y luego para 'leer', directamente se trae el case del binario (rdBin).

Lo mismo aplica para el sector de cargas:

    # read external load data
    if case.stru.loadRdOpt == 'raw':
        case = sim_db.check_BN_files(case, **kwargs) #NOTA: Ver si usar un nombre loc o cambiarlo en case
        sim_db.check_case_attris(case) #Esto debería imprimir alertas si falta algo
        case.stru = sim_db.ae_Ftable(case.stru, **kwargs)
        sim_db.svBin(case, **kwargs)
        if glob_print_output:
            print("Raw external load data used")
    elif case.stru.loadRdOpt == 'bin':
        if case.fName == '':
            print('Warning, empty Filename')
        temp_case = sim_db.rdBin(case.fName,**kwargs) # expects "sim" class object
        case = sim_db.update_BN_objs(case,temp_case,**kwargs) #Nuevamente
        if type(case) != sim_db.sim:
            print('Warning: Not a sim class obj')
        if glob_print_output:
            print("External load data read from binary preprocessed file")
    elif case.stru.loadRdOpt == 'non':
        if glob_print_output:
            print("no external load data read")
    return case

2) Luego, hay un sector del archivo comentado, que es una definición inicial de la parte de modalDecomp, actualmente implementada y funcional en sim_db.

3) Finalmente, hay una función llamada epp(case, kwargs), la cual generaba el análisis eigen inicialmente. Actualmente esto se hace en un par de líneas dentro del archivo análisis.py, por lo que podría implementarse algo con un nombre similar y que lo haga, pero descartando la original:

def epp(case, **kwargs):
    """
    global eigen analysis

    case: "sim" class object
    kwargs:
        -subDir_RSN, subDir_P11, subDir_FCS:  str
                        path to data from current folder
                        e.g.: 'subFolder1/subFolder2/folderWhereDataIs/'
                        default: ''
        - glob_print_output:    bool
                                info printing flag
                                default: False
    """

    case = rd_data(case, **kwargs)
    if case.stru.struEigOpt or case.stru.loadEigOpt:
        case.stru = modalDecomp(case.stru,**kwargs)

    if case.stru.EigWorkOpt:
        case.stru = sim_db.modal_w(case.stru, **kwargs)
        #NOTA: Acá podría ir otro svBIN

    case = sim_db.check_BN_files(case, **kwargs) #NOTA: ¿Por qué esto acá? Si leo de binario no sirve re-guardar, o sí?
    sim_db.svBin(case,**kwargs) #Se exporta todo, finalmente.

    return(case)

E implementar en sim_db algo similar a:

def eigen_an(case, dirs, **kwargs):

"""
Doc here

dirs: dict, {s_path, s_p11_subdir, RSN, FCS, etc.}
"""

if case.stru.rsnDe == '':
    raise TypeError('rsn file name cannot be empty') #O poner uno por def.

case.stru = rd_rsn_De(case.stru, **{'subDir_RSN':corresponding_path})

#¿File exists?¡
if s_FCS_fname in lst_av_dirs(s_path+s_p11_subdir+case_name+'/'):
    case.stru.loadsFN = s_FCS_fname[:-4]
    case.stru = ae_Ftable(case.stru,**{'subDir_FCS':s_path + s_p11_subdir+loc_case+'/'})
else:
    print('FCS file not found, case:')
case.stru = modalDecomp(case.stru, **{'subDir_BIN':bin_path})
svBin(case, **{'subDir_BIN': bin_path})
return case

Lo anterior NO funciona, es sólo una idea con copy-paste de lo que hay en el archivo de análisis. La implementaría para un caso único y con un decorador @repetir o algo, pasarla múltiples veces sobre el listado de archivos disponibles.

No hay más en eigpp. Creo que puede eliminarse directamente, conservando esto. Estaré implementando lo anterior en sim_db.

Mantengo al tanto las novedades. Pronto abriré una nueva branch con estos cambios.

RR

velazquezr35 commented 2 years ago

En la próxima reunión se pueden discutir estos cambios,

Una idea más pulida de la única función a 'rescatar' de eigpp sería:

def rec_cases(fnc):
    def inner(av_cases):
        fnc(av_case for av_case in av_cases)
    return inner

@rec_cases
def eigen_an(loc_case, dirs, **kwargs):
    """
    Doc here

    loc_case: str av file
    dirs: dict, {s_path, s_p11_subdir, RSN, FCS, etc.}
    """
    loc_sim = sim()
    loc_sim.name = case_tag(case_type='R',case_vel = loc_case[-4:], vel_otp ='.')
    loc_sim.fName = case_tag(case_type='R',case_vel = loc_case[-4:])
    loc_sim.descr = 'v_\infty =' + case_tag(case_vel = loc_case[-4:], vel_otp ='.') +'\, ft/s'        
    loc_sim.stru.nodes = [200000, 200001]
    loc_sim.stru.intLabOffset = 6 #NO OLVIDAR
    loc_sim.stru.sti = np.array([127300,127300,127300,221448514,221448514,221448514,0,0,0,0,0,0])
    loc_sim.stru.p11FN = 'pcolgante.@1' #binary .p11 fname
    loc_sim.stru = rd_u(loc_sim.stru, **{'subDir_P11':dirs['r_path']+dirs['r_p11_subdir']+loc_case+'/'})
    loc_sim.stru.rsnDe= 'pcolgante'
    loc_sim.stru = rd_rsn_De(loc_sim.stru, **{'subDir_RSN':dirs['r_path']+dirs['r_RSN_subdir']})
    loc_sim.stru = rd_u(loc_sim.stru, **{'subDir_P11':dirs['r_path']+dirs['r_p11_subdir']+loc_case+'/'})

    if dirs['r_FCS_fname'] in lst_av_dirs(dirs['r_path']+dirs['r_p11_subdir']+loc_case+'/'):
        loc_sim.stru.loadsFN = dirs['r_FCS_fname'][:-4]
        loc_sim.stru = ae_Ftable(loc_sim.stru,**{'subDir_FCS':dirs['r_path'] + dirs['r_p11_subdir']+loc_case+'/'})
        print('FCS file analized', loc_case)
    else:
        print('FCS file not found, case:', loc_case)
    # D - M DEC
    loc_sim.stru = modalDecomp(loc_sim.stru, **{'subDir_BIN':dirs['bin_path']})
    # F - W
    # loc_sim.stru = loads_w(loc_sim.stru)
    # loc_sim.stru = modal_w(loc_sim.stru)
    #SAVE
    svBin(loc_sim, **{'subDir_BIN': ['bin_path']})

    return None
velazquezr35 commented 2 years ago

Lo anterior se implementó correctamente en sim_db y es funcional.

Elimino eigpp.