Tutorial para correr desde Python

Crear estructuras desde scripts de python

Se puede crear y correr una estructura desde un script de python (archivo .py), corriendolo desde una consola de Python o desde el 'Command prompt' de windows. Se pueden encontrar ejemplos de scripts en el Gitlab del proyecto.

Ubicación: 

El archivo .py debe guardarse en el mismo directorio que la carpeta Atenea2d.

*Para guardar y correr el archivo desde otro directorio, debe poder importarse de manera correcta el paquete Atenea2d, donde quiera que esté en la computadora.

Estructura del archivo

El archivo debe importar todas las funciones del paquete core de Atenea2d (que está en el mismo directorio que el archivo de la estructura):

from Atenea2d.source.core import *

Cargar nodos y barras:

Los nodos se cargan definiendo las coordenadas en un diccionario.

XYZ = {} XYZ[1] = [0,0] # Nodo 1
XYZ[2] = [0,3] XYZ[3] = [0,6] XYZ[4] = [6,6] XYZ[5] = [6,3] XYZ[6] = [6,0]

Las barras se cargan definiendo las conectividades entre nodos en un diccionario.

CON = {} CON[1] = [1,2] # Barra 1, del Nodo 1 al Nodo 2 CON[2] = [1,2] CON[3] = [1,2] CON[4] = [1,2] CON[5] = [1,2] CON[6] = [1,2]

Se tiene que definir el tipo de elemento de barra

ElemName = {} ElemName[1] = '2DFrame' # Barra 1, es un elemento tipo viga ElemName[2] = '2DFrame' ElemName[3] = '2DFrame' ElemName[4] = '2DFrame' ElemName[5] = '2DFrame' ElemName[6] = '2DFrame'

Cargar vínculos:

Las condiciones de vínculo se indican especificando los grados de libertad restringidos en los nodos correspondientes.

BOUN = {} BOUN[1] = [1,1,1] # Nodo 1 con restricción horizontal, vertical y de giro BOUN[6] = [1,1,0] # Nodo 6 con restricción horizontal y vertical

Cargar releases de barras:

Los releases (articulaciones) en las barras se indican especificando el release liberado [axil, momento inicial, momento final] en la barra correspondiente

rel = {} rel[3] = [0,0,1] # Barra 3 con release en nudo inicial rel[6] = [0,1,0] # Barra 6 con release en nudo inicial

Cargar secciones y materiales:

Los materiales y secciones deben definirse primero, y luego asociarse a cada barra. Todas las barras deben tener un material y sección asociados.

Se les puede asignar cualquier nomber

# Materiales mat1 = {'E':1000, 'l':1e-5} acero = {'E':30000, 'l':1e-5} # Secciones seccion1 = {'A':1e6, 'I':50} vigas = {'A':23000, 'I':70}

Y ahora se asignan material y sección a cada barra.

ElemData = {} ElemData[1] = {'mat':mat1, 'seccion':seccion1} ElemData[2] = {'mat':acero, 'seccion':seccion1} ElemData[3] = {'mat':mat1, 'seccion':vigas} ElemData[4] = {'mat':mat1, 'seccion':vigas} ElemData[5] = {'mat':acero, 'seccion':seccion1} ElemData[6] = {'mat':mat1, 'seccion':seccion1}

Cargar acciones:

Las cargas puntuales se indican por nodo con una lista de 3 elementos: componente horizontal, vertical y momento.

P = {} P[2] = [5,0,0] # Carga puntual horizontal de valor 5, en el Nodo 2

Las cargas distribuidas se indican por barra, indicando, además, la terna (local o global) para definir el sentido de la carga.

w = {} w[3] = {'wyi':5, 'wyf':-10, 'wxi':0, 'wxf':0, 'terna':'local'} w[6] = {'wyi':-10, 'wyf':-10, 'wxi':0, 'wxf':0, 'terna':'global'}

Las deformaciones no-mecánicas (ej. temperatura, secado) se indican por barra, indicando: temperatura superior, temperatura inferior, espesor del elemento. El sentido superior e inferior está referido al eje local 'z' de la barra.

e0 = {} e0[1] = [-10,20,0.5] # Variación de temperatura en Barra 1

Los cedimientos de vínculo se indican por Nodo, con 3 componentes: cedimiento horizontal, vetical y de giro. Solo puede haber cedimiento en aquel grado de libertad donde haya un vínculo.

ced = {} ced[1] = [5,0,0] # Cedimiento de vínculo horizontal, en Nodo 1.

Crear estructura:

Se crea un objeto de la clase 'Estructura' mediante el módulo preprocess.

Estructura = preprocess.crear_estructura(XYZ, CON, ElemName, BOUN, ElemData, rel, P, w, e0, ced)

Alternativamente puede crearse una estructura desde un archivo .txt con un formato similar al recién explicado, usando el comando:

filename = 'direccion\\del\\archivo\\estructura.txt' Estructura = preprocess.crear_estructura_from_file(filename)

Correr estructura:

Correr el método de rigideces

analysis1el.metodo_rigideces(Estructura)

Correr la estructura con el método de flexibilidades

analysis1el.metodo_flexibilidades(Estructura)

Correr la estructura usando equilibrio de fuerzas (solo para estructura isostáticas)

analysis1el.resolver_isostatico(Estructura)

Mostrar resultados:

Plotear estructura (indices de nodos y barras, ejes locales) y acciones:

graph2d.plot_estructura(Estructura, fuerzas=True, vinculos=True, cedimientos=True, indiceN=True, ejes_loc=True, temp=True, indiceB=True, origen=True)


Plotear resultados (reacciones, diagramas, deformada):

graph2d.plot_resultados(Estructura, reacciones=False, diagrama='M', deformada=False)


graph2d.plot_resultados(Estructura, reacciones=False, diagrama=False, deformada=True)


Última modificación: domingo, 5 de enero de 2020, 20:18