Grupo5-Tarean 02 Dae P02 Lco VF
Grupo5-Tarean 02 Dae P02 Lco VF
Grupo5-Tarean 02 Dae P02 Lco VF
TRABAJO N° 2/2021-2
DOCENTE: Ph.D. ING. LUIS GABRIEL QUIROZ TORRES
RESPONSABLES:
LIMA, PERU
NOVIEMBRE 2021
ANALISIS AVANZADO DE ESTRUCTURAS, TRABAJO N° 2-2021-2
ÍNDICE
1. TRABAJO N° 2.......................................................................................................... 1
1.1 ENUNCIADO............................................................................................................. 1
1.2 OBJETIVO................................................................................................................. 1
1.3 METODOS DE SOLUCIÓN LINEAL ELÁSTICA DE UNA ESTRUCTURA
(ARMADURAS Y PÓRTICOS)..................................................................................1
1.3.1 GENERALIDADES....................................................................................................1
1.3.2 METODO DE SOLUCIÓN LINEAL ELÁSTICA DE UNA ESTRUCTURA
ARMADURAS- APLICACIÓN 1.................................................................................1
1.3.2.1 Datos de Ingreso para ejecución del programa:........................................................1
1.3.3 METODO DE SOLUCIÓN LINEAL ELÁSTICA DE UNA ESTRUCTURA
PORTICOS- APLICACIÓN 2.....................................................................................2
1.3.3.1 Datos de Ingreso para ejecución del programa:........................................................3
1.4 RESULTADOS.......................................................................................................... 3
1.4.1 ESTRUCTURA ARMADURA- APLICACION.............................................................3
1.4.2 ESTRUCTURA PORTICOS- APLICACION...............................................................3
1.5 CODIGO DEL PROGRAMA FORTLAND..................................................................4
1.5.1 ARMADURA EN FORTLAND....................................................................................4
1.5.2 PORTICO EN FORTLAND........................................................................................7
1.6 CONCLUSIONES....................................................................................................10
TRABAJO N° 2
IMAGENES
Ilustración 1 Armadura plana de 10 elementos y 6 nodos (obtenido del libro de Smith
Griffiths.................................................................................................................. 1
Ilustración 2 Pórtico plano de 6 elementos y 6 nodos (obtenido del libro de Smith Griffiths)...2
TRABAJO N° 2
1. TRABAJO N° 2
1.1 ENUNCIADO
Generar un programa para la solución lineal elástica de una estructura (armaduras y pórticos)
utilizando el método de las rigideces.
1.2 OBJETIVO
El objetivo del presente trabajo es generar una rutina para la solución lineal elástica de una
estructura (armaduras y pórticos) utilizando el método de las rigideces.
Se ha elaborado la programación para la armadura y pórtico de manera independiente, por los datos
de entrada particularmente: el EA para armaduras y EA e EI para pórticos y por la matriz de rigidez
local de cada elemento.
Como limitaciones del programa, es que el ingreso de cargas es para cada nodo, por tanto, de existir
cargas distribuidas o cargas en otra posición del elemento se deberá calcular primeramente los
momentos de empotramiento y asignar dichas cargas a los nodos.
Ilustración 1 Armadura plana de 10 elementos y 6 nodos (obtenido del libro de Smith Griffiths
TRABAJO N° 2
Descripción de datos de ingreso:
nels: número de elementos
nn: número de nodos
ndim: 2 Plana o 3 espacial
np_type: número de tipos de elementos EA.
prop (ea): Módulo de eslasticidad por área.
g_coord: coordenadas en los nodos (x,y)
g_num: nodos que conforman el elemento.
nr,(k,nf(:,K),i=1,nr: número de reacciones, y
restricciones donde 0 es restricción y 1 no
restricción algún desplazamiento.
Loaded_nodes,(k,loads(nf(:,k): número de
nodos cargados, carga por nodo según
dirección.
Ilustración 2 Pórtico plano de 6 elementos y 6 nodos (obtenido del libro de Smith Griffiths)
TRABAJO N° 2
1.3.3.1 Datos de Ingreso para ejecución del programa:
Descripción de datos de ingreso:
nels: número de elementos
nn: número de nodos
ndim: 2 Plana o 3 espacial
np_type: número de tipos de elementos EA.
prop (ea,ei): Módulo de eslasticidad por
área y módulo de elasticidad por inersia.
g_coord: coordenadas en los nodos (x,y)
g_num: nodos que conforman el elemento.
nr,(k,nf(:,K),i=1,nr: número de reacciones, y
restricciones donde 0 es restricción y 1 no
restricción algún desplazamiento.
Loaded_nodes,(k,loads(nf(:,k): número de
nodos cargados, carga por nodo según
dirección.
Fixed_freedoms: Se considera cero para
desplazamientos predefinidos a
implementar.
1.4 RESULTADOS
1.4.1 ESTRUCTURA ARMADURA- APLICACION
TRABAJO N° 2
1.5 CODIGO DEL PROGRAMA FORTLAND
1.5.1 ARMADURA EN FORTLAND
PROGRAM ARMADURA
!-------------------------------------------------------------------------
! elements in 2- or 3-dimensions
!-------------------------------------------------------------------------
USE main
USE geom
IMPLICIT NONE
INTEGER,PARAMETER::iwp=SELECTED_REAL_KIND(15)
INTEGER::fixed_freedoms,i,iel,k,loaded_nodes,ndim,ndof=2,nels,neq,nod=2, &
nodof,nn,nprops=1,np_types,nr,nlen
REAL(iwp)::axial,penalty=1.0e20_iwp,zero=0.0_iwp
!-----------------------dynamic arrays------------------------------------
INTEGER,ALLOCATABLE::etype(:),g(:),g_g(:,:),g_num(:,:),kdiag(:),nf(:,:), &
no(:),node(:),num(:),sense(:)
REAL(iwp),ALLOCATABLE::action(:),coord(:,:),eld(:),g_coord(:,:),km(:,:), &
kv(:),loads(:),prop(:,:),value(:)
CHARACTER(LEN=15)::argv
CALL getname(argv,nlen)
OPEN(10,FILE=argv(1:nlen)//'.dat')
OPEN(11,FILE=argv(1:nlen)//'.res')
READ(10,*)nels,nn,ndim,np_types
nodof=ndim
ndof=nod*nodof
ALLOCATE(nf(nodof,nn),km(ndof,ndof),coord(nod,ndim),g_coord(ndim,nn), &
eld(ndof),action(ndof),g_num(nod,nels),num(nod),g(ndof),g_g(ndof,nels),&
etype(nels),prop(nprops,np_types))
READ(10,*)prop
etype=1
IF(np_types>1)READ(10,*)etype
READ(10,*)g_coord
READ(10,*)g_num
TRABAJO N° 2
nf=1
READ(10,*)nr,(k,nf(:,k),i=1,nr)
CALL formnf(nf)
neq=MAXVAL(nf)
ALLOCATE(kdiag(neq),loads(0:neq))
kdiag=0
elements_1: DO iel=1,nels
num=g_num(:,iel)
CALL num_to_g(num,nf,g)
g_g(:,iel)=g
CALL fkdiag(kdiag,g)
END DO elements_1
DO i=2,neq
kdiag(i)=kdiag(i)+kdiag(i-1)
END DO
ALLOCATE(kv(kdiag(neq)))
WRITE(11,'(2(A,I5))') &
kv=zero
elements_2: DO iel=1,nels
num=g_num(:,iel)
coord=TRANSPOSE(g_coord(:,num))
CALL pin_jointed(km,prop(1,etype(iel)),coord)
g=g_g(:,iel)
CALL fsparv(kv,km,g,kdiag)
END DO elements_2
loads=zero
READ(10,*)loaded_nodes,(k,loads(nf(:,k)),i=1,loaded_nodes)
READ(10,*)fixed_freedoms
IF(fixed_freedoms/=0)THEN
ALLOCATE(node(fixed_freedoms),no(fixed_freedoms), &
sense(fixed_freedoms),value(fixed_freedoms))
TRABAJO N° 2
READ(10,*)(node(i),sense(i),value(i),i=1,fixed_freedoms)
DO i=1,fixed_freedoms
no(i)=nf(sense(i),node(i))
END DO
kv(kdiag(no))=kv(kdiag(no))+penalty
loads(no)=kv(kdiag(no))*value
END IF
CALL sparin(kv,kdiag)
CALL spabac(kv,loads,kdiag)
loads(0)=zero
DO k=1,nn
WRITE(11,'(I5,3E12.4)')k,loads(nf(:,k))
END DO
elements_3: DO iel=1,nels
num=g_num(:,iel)
coord=TRANSPOSE(g_coord(:,num))
g=g_g(:,iel)
eld=loads(g)
CALL pin_jointed(km,prop(1,etype(iel)),coord)
action=MATMUL(km,eld)
WRITE(11,'(I5,6E12.4)')iel,action
CALL glob_to_axial(axial,action,coord)
END DO elements_3
STOP
TRABAJO N° 2
1.5.2 PORTICO EN FORTLAND
PROGRAM PORTICO
!-------------------------------------------------------------------------
!-------------------------------------------------------------------------
USE main
USE geom
IMPLICIT NONE
INTEGER,PARAMETER::iwp=SELECTED_REAL_KIND(15)
INTEGER::fixed_freedoms,i,iel,k,loaded_nodes,ndim,ndof,nels,neq,nod=2, &
nodof,nn,nprops,np_types,nr,nlen
REAL(iwp)::penalty=1.0e20_iwp,zero=0.0_iwp
!-----------------------dynamic arrays------------------------------------
INTEGER,ALLOCATABLE::etype(:),g(:),g_g(:,:),g_num(:,:),kdiag(:),nf(:,:), &
no(:),node(:),num(:),sense(:)
REAL(iwp),ALLOCATABLE::action(:),coord(:,:),eld(:),gamma(:),g_coord(:,:),&
km(:,:),kv(:),loads(:),prop(:,:),value(:)
CHARACTER(LEN=15)::argv
CALL getname(argv,nlen)
OPEN(10,FILE=argv(1:nlen)//'.dat')
OPEN(11,FILE=argv(1:nlen)//'.res')
READ(10,*)nels,nn,ndim,nprops,np_types
IF(ndim==2)nodof=3
IF(ndim==3)nodof=6
ndof=nod*nodof
ALLOCATE(nf(nodof,nn),km(ndof,ndof),coord(nod,ndim),g_coord(ndim,nn), &
eld(ndof),action(ndof),g_num(nod,nels),num(nod),g(ndof),gamma(nels), &
TRABAJO N° 2
g_g(ndof,nels),prop(nprops,np_types),etype(nels))
READ(10,*)prop
etype=1
IF(np_types>1)READ(10,*)etype
IF(ndim==3)READ(10,*)gamma
READ(10,*)g_coord
READ(10,*)g_num
nf=1
READ(10,*)nr,(k,nf(:,k),i=1,nr)
CALL formnf(nf)
neq=MAXVAL(nf)
ALLOCATE(kdiag(neq),loads(0:neq))
kdiag=0
elements_1: DO iel=1,nels
num=g_num(:,iel)
CALL num_to_g(num,nf,g)
g_g(:,iel)=g
CALL fkdiag(kdiag,g)
END DO elements_1
DO i=2,neq
kdiag(i)=kdiag(i)+kdiag(i-1)
END DO
ALLOCATE(kv(kdiag(neq)))
WRITE(11,'(2(A,I10))') &
kv=zero
elements_2: DO iel=1,nels
TRABAJO N° 2
num=g_num(:,iel)
coord=TRANSPOSE(g_coord(:,num))
CALL rigid_jointed(km,prop,gamma,etype,iel,coord)
g=g_g(:,iel)
CALL fsparv(kv,km,g,kdiag)
END DO elements_2
loads=zero
READ(10,*)loaded_nodes,(k,loads(nf(:,k)),i=1,loaded_nodes)
READ(10,*)fixed_freedoms
IF(fixed_freedoms/=0)THEN
ALLOCATE(node(fixed_freedoms),no(fixed_freedoms), &
sense(fixed_freedoms),value(fixed_freedoms))
READ(10,*)(node(i),sense(i),value(i),i=1,fixed_freedoms)
DO i=1,fixed_freedoms
no(i)=nf(sense(i),node(i))
END DO
kv(kdiag(no))=kv(kdiag(no))+penalty
loads(no)=kv(kdiag(no))*value
END IF
CALL sparin(kv,kdiag)
CALL spabac(kv,loads,kdiag)
loads(0)=zero
DO k=1,nn
WRITE(11,'(I5,6E12.4)')k,loads(nf(:,k))
END DO
TRABAJO N° 2
WRITE(11,'(/A)')" Element Actions"
elements_3: DO iel=1,nels
num=g_num(:,iel)
coord=TRANSPOSE(g_coord(:,num))
g=g_g(:,iel)
eld=loads(g)
CALL rigid_jointed(km,prop,gamma,etype,iel,coord)
action=MATMUL(km,eld)
IF(ndim<3)THEN
WRITE(11,'(I5,6E12.4)')iel,action
ELSE
WRITE(11,'(I5,6E12.4)')iel, action(1: 6)
WRITE(11,'(A,6E12.4)')" ",action(7:12)
END IF
END DO elements_3
STOP
END PORTICO.
1.6 CONCLUSIONES
El código desarrollado permite obtener resultados eficientes de desplazamientos y de fuerzas
internas, mediante lenguaje de programación FORTLAND, mediante ingreso de datos de archivo .txt.
Existe ciertas limitaciones del código del presente trabajo es que el ingreso de cargas es para cada
nodo, por tanto, de existir cargas distribuidas o cargas en otra posición del elemento se deberá
calcular primeramente los momentos de empotramiento y asignar dichas cargas a los nodos.
TRABAJO N° 2
GRUPO 5-EJERCICIO EN CLASE 20-11-2021
RESPONSABLES:
2. DESCRIPCION.
Durante la evaluación de la sala 5, en el procesamiento no calculaba los resultados salía error el cual
fue corregido, la razón del error fue en las coordenadas de los nodos, el programa está determinado
para que el primer nodo inicie en el nodo 1, ello implica que las coordenadas deberán pasar por
dicho nodo.
TRABAJO N° 2
Inputs de ingreso, corregidos con
las coordenadas que corresponde,
CONSIDERANDO 0,0 EN EL NODOD
1.
4. RESULTADOS.
5. RESPUESTA A LA PREGUNTA.
6. CODIGO FORTLAND
PROGRAM ARM
!-------------------------------------------------------------------------
! Program 5.6 Three-dimensional strain of an elastic solid using
! 8-, 14- or 20-node brick hexahedra. Mesh numbered in x-z
! planes then in the y-direction. No global stiffness matrix
! assembly. Diagonally preconditioned conjugate gradient solver.
TRABAJO N° 2
!-------------------------------------------------------------------------
USE main
USE geom
IMPLICIT NONE
INTEGER,PARAMETER::iwp=SELECTED_REAL_KIND(15)
INTEGER::fixed_freedoms,i,iel,k,loaded_nodes,ndim,ndof=2,nels,neq,nod=2, &
nodof,nn,nprops=1,np_types,nr,nlen
REAL(iwp)::axial,penalty=1.0e20_iwp,zero=0.0_iwp
!-----------------------dynamic arrays------------------------------------
INTEGER,ALLOCATABLE::etype(:),g(:),g_g(:,:),g_num(:,:),kdiag(:),nf(:,:), &
no(:),node(:),num(:),sense(:)
REAL(iwp),ALLOCATABLE::action(:),coord(:,:),eld(:),g_coord(:,:),km(:,:), &
kv(:),loads(:),prop(:,:),value(:)
CHARACTER(LEN=15)::argv
!-----------------------input and initialisation--------------------------
CALL getname(argv,nlen)
OPEN(10,FILE=argv(1:nlen)//'.dat')
OPEN(11,FILE=argv(1:nlen)//'.res')
READ(10,*)nels,nn,ndim,np_types
nodof=ndim
ndof=nod*nodof
ALLOCATE(nf(nodof,nn),km(ndof,ndof),coord(nod,ndim),g_coord(ndim,nn), &
eld(ndof),action(ndof),g_num(nod,nels),num(nod),g(ndof),g_g(ndof,nels),&
etype(nels),prop(nprops,np_types))
READ(10,*)prop
etype=1
IF(np_types>1)READ(10,*)etype
READ(10,*)g_coord
READ(10,*)g_num
nf=1
READ(10,*)nr,(k,nf(:,k),i=1,nr)
CALL formnf(nf)
neq=MAXVAL(nf)
ALLOCATE(kdiag(neq),loads(0:neq))
!----------------------loop the elements to find global array sizes-------
kdiag=0
elements_1: DO iel=1,nels
num=g_num(:,iel)
CALL num_to_g(num,nf,g)
g_g(:,iel)=g
CALL fkdiag(kdiag,g)
END DO elements_1
DO i=2,neq
kdiag(i)=kdiag(i)+kdiag(i-1)
END DO
ALLOCATE(kv(kdiag(neq)))
WRITE(11,'(2(A,I5))') &
" There are",neq," equations and the skyline storage is",kdiag(neq)
!-----------------------global stiffness matrix assembly------------------
kv=zero
elements_2: DO iel=1,nels
num=g_num(:,iel)
coord=TRANSPOSE(g_coord(:,num))
CALL pin_jointed(km,prop(1,etype(iel)),coord)
g=g_g(:,iel)
CALL fsparv(kv,km,g,kdiag)
END DO elements_2
!-----------------------read loads and/or displacements-------------------
loads=zero
READ(10,*)loaded_nodes,(k,loads(nf(:,k)),i=1,loaded_nodes)
READ(10,*)fixed_freedoms
IF(fixed_freedoms/=0)THEN
ALLOCATE(node(fixed_freedoms),no(fixed_freedoms), &
sense(fixed_freedoms),value(fixed_freedoms))
READ(10,*)(node(i),sense(i),value(i),i=1,fixed_freedoms)
TRABAJO N° 2
DO i=1,fixed_freedoms
no(i)=nf(sense(i),node(i))
END DO
kv(kdiag(no))=kv(kdiag(no))+penalty
loads(no)=kv(kdiag(no))*value
END IF
!-----------------------equation solution --------------------------------
CALL sparin(kv,kdiag)
CALL spabac(kv,loads,kdiag)
loads(0)=zero
WRITE(11,'(/A)') " Node Displacement(s)"
DO k=1,nn
WRITE(11,'(I5,3E12.4)')k,loads(nf(:,k))
END DO
!-----------------------retrieve element end actions----------------------
WRITE(11,'(/A)')" Element Actions"
elements_3: DO iel=1,nels
num=g_num(:,iel)
coord=TRANSPOSE(g_coord(:,num))
g=g_g(:,iel)
eld=loads(g)
CALL pin_jointed(km,prop(1,etype(iel)),coord)
action=MATMUL(km,eld)
WRITE(11,'(I5,6E12.4)')iel,action
CALL glob_to_axial(axial,action,coord)
WRITE(11,'(A,E12.4)')" Axial force =",axial
END DO elements_3
STOP
END PROGRAM ARM
TRABAJO N° 2