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
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
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)