Está en la página 1de 17

UNIVERSIDAD NACIONAL DE INGENIERIA

FACULTAD DE INGENIERIA CIVIL

MAESTRIA EN CIENCIAS CON MENCIÓN EN INGENIERIA ESTRUCTURAL

ANALISIS AVANZADO DE ESTRUCTURAS

TRABAJO N° 2/2021-2
DOCENTE: Ph.D. ING. LUIS GABRIEL QUIROZ TORRES

RESPONSABLES:

1. LEONCIO CARRASCO OLIVERA


2. EDWIN G. MENDOZA HUERTO
3. EDWIN ONESIMO GONZALES MARTEL
4. JASSON B. TICONA GUEVARA
5. FRANCIS ALEXANDER CANALES GOYZUETA

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.

1.3 METODOS DE SOLUCIÓN LINEAL ELÁSTICA DE UNA ESTRUCTURA


(ARMADURAS Y PÓRTICOS)
1.3.1 GENERALIDADES
Para el presente trabajo, se ha desarrollado mediante lenguaje de programación FORTLAND F90.

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.

El ingreso de datos es mediante un archivo .txt

El código permite calcular desplazamientos en los nodos y fuerzas internas.

1.3.2 METODO DE SOLUCIÓN LINEAL ELÁSTICA DE UNA ESTRUCTURA


ARMADURAS- APLICACIÓN 1

Ilustración 1 Armadura plana de 10 elementos y 6 nodos (obtenido del libro de Smith Griffiths

1.3.2.1 Datos de Ingreso para ejecución del programa:

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.

1.3.3 METODO DE SOLUCIÓN LINEAL ELÁSTICA DE UNA ESTRUCTURA


PORTICOS- APLICACIÓN 2

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

1.4.2 ESTRUCTURA PORTICOS- APLICACION

TRABAJO N° 2
1.5 CODIGO DEL PROGRAMA FORTLAND
1.5.1 ARMADURA EN FORTLAND
PROGRAM ARMADURA

!-------------------------------------------------------------------------

! Program ARMADURA Analysis of elastic pin-jointed frames using 2-node rod

! 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

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

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

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

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

!-----------------------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 ARMADURA

TRABAJO N° 2
1.5.2 PORTICO EN FORTLAND
PROGRAM PORTICO

!-------------------------------------------------------------------------

! Program 4.4 Analysis of elastic rigid-jointed frames using 2-node

! beam/rod 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,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

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

!-----------------------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,I10))') &

" There are",neq," equations and the skyline storage is",kdiag(neq)

!-----------------------global stiffness matrix assembly------------------

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

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

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 Displacements and Rotation(s)"

DO k=1,nn

WRITE(11,'(I5,6E12.4)')k,loads(nf(:,k))

END DO

!-----------------------retrieve element end actions----------------------

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:

6. LEONCIO CARRASCO OLIVERA


7. EDWIN G. MENDOZA HUERTO
8. EDWIN ONESIMO GONZALES MARTEL
9. JASSON B. TICONA GUEVARA
10. FRANCIS ALEXANDER CANALES GOYZUETA
1. PRACTICA

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.

3. DATOS DE INGRESO CORREGIDOS

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.

DESPLAZAMIENTO EN EL NODO 3: (0.9325E+02,0.1600E+02) ft

FUERZA AXIAL EN EL ELEMENTO 1: -0.1131E+02 K

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

También podría gustarte