Universidad Nacional San Crist ´ obal de Huamanga Facultad de Ingenier ´ ıa de Minas, Geolog ´ ıa y Civil Escuela de Formaci ´ on Profesional de Ingenier ´ ıa Civil Tesis Para Optar el T ´ ıtulo de Ingeniero Civil ”Interfaz de Programaci ´ on para Aplicaciones del Sap2000 y Visual C# Fundamentado en MathCad” Por: Edmundo Canchari Guti ´ errez Dirigido Por: Ing. Cristian Castro P ´ erez Ayacucho - Marzo 2009
125
Embed
Universidad Nacional San Cristobal de Huamanga · Presentaci on Esta tesis es presentada como parte de los requisitos para optar el t tulo acad emi-co de Ingeniero Civil, de la Universidad
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Universidad Nacional San Cristobal deHuamanga
Facultad de Ingenierıa de Minas, Geologıa y
Civil
Escuela de Formacion Profesional de
Ingenierıa Civil
Tesis Para Optar el Tıtulo de Ingeniero Civil
”Interfaz de Programacion para Aplicaciones del
Sap2000 y Visual C# Fundamentado en MathCad”
Por:
Edmundo Canchari Gutierrez
Dirigido Por:
Ing. Cristian Castro Perez
Ayacucho - Marzo 2009
Presentacion
Esta tesis es presentada como parte de los requisitos para optar el tıtulo academi-
co de Ingeniero Civil, de la Universidad Nacional San Cristobal de Huamanga, la
misma contiene los resultados obtenidos en investigaciones llevadas a cabo en el
etc. En la presente Tesis se programara desde el lenguaje de programacion Visual
c# por ser un lenguaje orientado a objetos y estar completamente integrado con la
plataforma .NET.
3.2. Microsoft Visual Studio
Lo que Microsoft nos ofrece con Visual Studio 2009 Express Edition es un
entorno de desarrollo de ultima generacion, conjuntamente con el compilador de
1Microsoft presento c# al publico en la Professional Developer’s Conference en Orlando, Flo-
rida, en el verano del 2000. [19], pagina 37
21
uno de los lenguajes de programacion mas avanzados que existe en la actualidad
C#2. Las versiones Express son de distribucion gratuita. El desarrollo del programa
para la tesis se realiza desde este editor.
3.3. Microsoft .NET framework
Microsoft .NET es el conjunto de nuevas tecnologıas en las que Microsoft a estado
trabajando durante los ultimos anos con el objetivo de obtener una plataforma
sencilla y potente para distribuir el software en forma de servicios que puedan ser
suministrados remotamente y que puedan comunicarse y combinarse unos con otros
de manera totalmente independiente de la plataforma, lenguaje de programacion y
modelo de componentes con los que hayan sido desarrollados. Esta es la llamada
plataforma .NET3.
3.4. El lenguaje de programacion Visual c#
Segun La Biblia C# combina las mejores ideas de lenguajes como C, C++ y
Java con las mejoras de productividad de .NET Framework de Microsoft y
brinda una experiencia de codificacion muy productiva tanto para los nuevos
programadores como para los veteranos . . . Microsoft diseno C# desde su base
para aprovechar el nuevo entorno .NET Framework. Como C# forma parte de
este nuevo mundo .NET debera comprender perfectamente lo que proporciona
.NET Framework y de que manera aumenta su productividad4.
Los fundamentos de programacion en Visual C# se encuentran detalladamente
escritos en los libros de la referencia, con fines de formalidad es necesario comprender
las siguientes definiciones.
2Referencia [20] pagina 053Referencia [21] pagina 094Reproducido completamente de la referencia [19] paginas 37 - 38
22
3.4.1. Clase
Una clase es una coleccion de codigo y de variables, las clases gestionan el estado
en forma de variables que contienen, y comportamientos, en forma de los metodos
que contienen. Sin embargo una clase es solo una plantilla desde donde se crean
objetos. ([19] pagina 192). Todo el codigo y los datos deben ser incluidos en una
clase, no se puede definir una variable fuera de una clase y no se puede escribir
ningun codigo que no este en una clase.
3.4.2. Espacio de nombre
Todo programa en C# debe estar contenido en un espacio de nombre con la
finalidad de evitar confusiones en la utilizacion de variables, que pueden tambien
estar definidos con el mismo nombre en otras aplicaciones. C# permite agrupar clases
en una coleccion de clases llamada espacio de nombre. Los espacios de nombres tienen
nombres y sirven de ayuda para organizar colecciones de clases en agrupaciones
logicas.
3.4.3. Tipos de datos
C# permite trabajar con dos tipos de dato: de valor y de referencia. Los de
valor contiene valores reales, los de referencia contienen referencias a valores valores
almacenados en algun lugar de la memoria.
3.4.4. Metodo
Los metodos son bloques de instrucciones que devuelven algun tipo de valor
cuando se ejecutan( [19] pagina 149).
3.4.5. Objeto
C# es un lenguaje orientado a objetos, los objetos son instancias de una clase.
23
3.4.6. Interface
Una interfaz de C# es un conjunto de firmas de metodos, propiedades, eventos o
indizadores agrupadas con un nombre comun. Las interfaces funcionan como conjun-
to de funcionalidades definidas que pueden implementarse en una clase o estructura
de c#( [19] pagina 301)
3.5. Interfaz de programacion para aplicaciones
de sap2000
Se ha definido lo que es una interface en la seccion(3.4.6), para el desarrollo de
la aplicacion se utiliza el editor Microsoft Visual Studio 9 Express Edition desde
la cual se integra la interfaz de programacion para aplicaciones(API) de Sap2000
11.0.4. Desde este punto, con las ordenes adecuadas, todos los metodos que soporte
la interfaz del programa Sap2000 11.0.4 estan libres para Visual C# a disposicion
para ser utilizados como si de sus propias ordenes se tratase5.
3.5.1. Instalacion
La interfaz de programacion para aplicaciones de Sap2000 se instala por defecto
con cualquier distribucion de Sap2000 desde su version 11.0.0.
3.5.2. Utilidad ¿Para que sirve?
En el proceso de modelamiento para el analisis mediante el metodo de los ele-
mentos finitos el procedimiento es repetitivo para cada tipo de estructura; el grupo
de programadores que mantiene Sap2000 conscientes de esta realidad liberan a dis-
posicion de los usuarios una interface de Sap2000 con la cual es posible automatizar
procedimientos completos para cada proposito, desde cualquier lenguaje de progra-
macion externo, dependiendo de las necesidades de cada usuario.
5La documentacion completa con ejemplos para cada orden se encuentra en su manual SAP2000
API Documentation[22]
24
Control Propiedad Valor
Form name frmDiagnostico
text Sap2000Diagnostico
Button name cmdOpensap2000
text Abrir
Button name cmdCapturesap2000
text Capturar
Button name cmdCloseSap2000
text Cerrar
Button name cmdEvaluarSap2000
text Evaluar
Cuadro 3.1: Cuadro de elementos utilizados
Si alguna vez se penso tener el control absoluto de Sap2000 ahora ya es posible,
mediante la interface de programacion para aplicaciones se tiene un control total
sobre el programa. Tener a disposicion toda la capacidad de Sap2000 requiere una
preparacion adecuada, tanto en el conocimiento del metodo de los elementos finitos
y los modelos estructurales para su analisis.
3.6. Procedimientos generales
Seguidamente se realiza una descripcion general para integrar la Interfaz de Pro-
gramacion para Aplicaciones [22] de Sap2000 v11.0.4 Educacional en el entorno de
desarrollo integrado Microsoft Visual Studio 9 Express Edition, especıficamente pro-
gramando en el lenguaje Microsoft Visual c#6, para lo cual, se crea una aplicacion
y los elementos que se usan se detalla en la cuadro(3.1). El formulario creado se
muestra en la figura(3.1).
6Los fundamentos de programacion del lenguaje se encuentran en los libros de la referencia [20],
[23], [21], [19]
25
Figura 3.1: Ventana principal
Figura 3.2: Referencia desde C# al API de Sap2000 11.0.4
3.6.1. Integrar interface de Sap2000 a Visual Studio
Desde la ventana Explorador de Soluciones, haciendo click derecho sobre el pro-
yecto creado, elegir del menu emergente Agregar referencia... como muestra la figu-
ra(3.2). Luego, se muestra la ventana Agregar referencia, entre las opciones elegir la
pestana etiquetada COM, entre los muchos componentes existentes en la lista elija
Sap2000 como indica la figura(3.3).
Agregando esta referencia, se le indica a Microsoft Visual c# que queremos
trabajar con la Interface Sap2000.SapObject, en este punto Microsoft Visual Studio
26
Figura 3.3: Integrar API Sap2000 11.0.4
2009 Express Edition se encargara de integrar absolutamente todos su contenido de
la Interface Sap2000.SapObject.
3.6.2. Implementar interface de Sap2000 en un objeto
Para utilizar las ordenes de la interface se opta por implementar en un objeto
desde el lenguaje de programacion Microsoft Visual c#, desde este punto es visible
los metodos de la interface a traves del objeto. El siguiente programa muestra la
manera de implementar la interface de Sap2000 en un objeto de Visual c#.
1 // Implementa l a i n t e r f a z de Sap2000 a un ob je to2 Sap2000 . SapObject SapObjeto ;3 // i n i c i a l i z a e l ob j e to4 SapObjeto = new Sap2000 . SapObject ( ) ;
3.6.3. Accediendo al objeto que implementa la interface
El objeto que contendra la interface de la aplicacion Sap2000 se debe declarar
de modo que sea visible en todo el proyecto, mediante codigo deberemos referirnos
a este objeto para todos los propositos. Creado el objeto que contiene la aplicacion,
el siguiente paso es proporcionarle un archivo Sap2000 correspondiente, puede ser
inicializando un nuevo archivo o apoderandose de uno existente. Se tratara ambas
alternativas.
27
3.6.4. Inicializando un archivo nuevo
Es posible desde Microsoft Visual c# inicializar el programa Sap2000, el siguiente
programa inicializa un nuevo entorno en Sap2000 y dibuja un muro en su espacio
modelo, asignando propiedades por defecto.
1 private void cmdOpenSap2000 Click ( object sender , EventArgs e )2 {3 // dec l a ra v a r i a b l e t i po Sap20004 Sap2000 . SapObject SapObjeto ;5 long r e t ;6 // i n i c i a l i z a r l a v a r i a b l e de l t i po Sap20007 SapObjeto = new Sap2000 . SapObject ( ) ;8 // i n i c i a l i z a l a a p l i c a c i o n9 SapObjeto . App l i c a t i onSta r t ( Sap2000 . eUnits . kgf m C , true , ”Prueba” ) ;
10 // crea e i n i c i a l i z a e l e spac i o modelo de sap200011 r e t = SapObjeto . SapModel . In i t i a l i z eNewMode l ( Sap2000 . eUnits . kgf m C )
;12 // d ibuja una muro13 r e t = SapObjeto . SapModel . F i l e . NewWall (3 , 3 , 3 , 3 , true , ”prueba” ) ;14 }
3.6.5. Apoderarse de un Archivo Existente
Otra alternativa muy frecuente es cuando mediante codigo se quiere apoderar de
un modelo Sap2000 existente y que este en ejecucion, a modo de prueba, el programa
culmina mostrando un mensaje del tipo de unidades actual utilizado.
1 private void cmdCaptureSap2000 Click ( object sender , EventArgs e )2 {3 // debe e x i s t i r un arch ivo sap2000 e j ecut andose actualmente4 // dec l a ra v a r i a b l e de l t i po Sap20005 Sap2000 . SapObject SapObjeto ;6 // i n i c i a l i z a l a v a r i a b l e de l t i po Sap20007 // e s ta acc i on se apodera automaticamente de un arch ivo e x i s t e n t e8 SapObjeto = new Sap2000 . SapObject ( ) ;9 //a modo de comparacion
10 // muestra l a s unidades de medida ac tua l de l e spac i o modelo11 Sap2000 . eUnits MyUnits ;12 MyUnits = SapObjeto . SapModel . GetPresentUnits ( ) ;13 string a = ”La unidad de medida ac tua l es : ” + MyUnits . ToString ( ) ;14 MessageBox . Show( a , ”APISap2000” , MessageBoxButtons .OK) ;15 }
28
3.6.6. Cerrando la Aplicacion
Otro procedimiento habitual cuando se manipula programas desde aplicaciones
externas, es cerrar el programa mediante codigo, para el objeto del tipo Sap2000
la forma correcta de terminar la aplicacion es con las ordenes adecuadas como se
muestra.
1 private void cmdClosesap2000 Click ( object sender , EventArgs e )2 {3 // debe e x i s t i r un arch ivo sap2000 en e j e c u c i o n4 Sap2000 . SapObject SapObjeto = new Sap2000 . SapObject ( ) ;5 // c i e r r a l a a p l i c a c i o n6 SapObjeto . App l i ca t ionEx i t ( fa l se ) ;7 // de ja s i n conten ido a l e spac i o modelo8 SapObjeto . SapModel = null ;9 // de ja s i n conten ido a l ob j e to creado
10 SapObjeto = null ;11 }
3.6.7. La funcion magica
Finalmente, el programa debe ser capaz de decidir adecuadamente una u otra
alternativa, segun sea el caso, el programa siguiente cumple esta funcion.
1 private void cmdEvaluarSap2000 Click ( object sender , EventArgs e )2 {3 /∗ Este es e l modulo magico , encargado de ave r i guar e l estado4 ac tua l de Sap2000 en l a maquina ∗/5
6 // crea y as igna e l ob j e to Sap20007 Sap2000 . SapObject SapObjeto = new Sap2000 . SapObject ( ) ;8 bool Dianos t i co ;9 string mensaje ;
10 // s i un arch ivo se e j e c u t a e s t a v i s i b l e11 Dianos t i co = SapObjeto . v i s i b l e ( ) ;12 i f ( Dianos t i co )13 {14 // mensaje = ” es t rue : e s t a v i s i b l e en l a pa n ta l l a ” ;15 mensaje = ”No se e j e c u t a Sap2000” ;16 }17 else18 {19 // mensaje = ” es f a l s e : no e s t a v i s i b l e en l a pan ta l l a ” ;20 mensaje = ”Se e j e c u t a Sap2000” ;21 }22 MessageBox . Show( mensaje , ”API Sap2000” , MessageBoxButtons .OK) ;23 }
29
Parte III
Materiales y metodos
30
Capıtulo 4
Analisis se Solidos Axisimetricos
con el metodo de los elementos
finitos
4.1. Generalidades
El presenta capıtulo trata sobre el analisis de estructuras mediante el Metodo de
los Elementos Finitos, en su formulacion para estructuras con total simetrıa respecto
a un eje del sistema de referencia, los cuales pueden ser modelados en el plano de
su seccion caracterıstica de revolucion.
Para entender el presente capıtulo es necesario tener un conocimiento suficiente
del metodo de los elementos finitos1, ya que los terminos utilizados y su programa-
cion de una plantilla en MathCad 14 con la finalidad de justificar los resultados de
Sap2000 se realiza directamente. Para la justificacion de los resultados de Sap2000
se aprovechara la capacidad de manipulacion simbolica y numerica del programa
MathCad 14 2. La teorıa sera explicado detalladamente junto a su programacion a
1La teorıa del Metodo de los Elementos Finitos se encuentra en cualquiera de los libros de la
referencia [8], [12], [5], [4], la historia de su evolucion narrada de una manera magnıfica se encuentra
en la referencia [6]2mathcad 14 es un programa orientado para realizar informes tecnicos detallados, sus funciones
y la manera de utilizarlo se encuentra en las referencias [24], [25], [26]
31
la vez que se desarrolla un ejemplo de aplicacion; por ser esta la manera natural de
proceder en un documento de MathCad 14.
4.1.1. Sap2000
Es un programa de computo desarrollado por la companıa Computers and Struc-
tures, Inc que puede ser aplicada en el analisis de estructuras de todo proposito.
4.1.1.1. Metodo de analisis
En en proceso de analisis de estructuras Sap2000 utiliza el metodo de los ele-
mentos finitos.
4.1.1.2. Metodo de elementos finitos
El metodo de los elementos finitos es uno de los procedimientos que existen pa-
ra aproximar el comportamiento de una estructura con infinitos grados de libertad
por el de otra, con aproximadamente las mismas propiedades fısicas y geometricas,
pero con un numero finito de grados de libertad, cuyas ecuaciones de equilibrio pue-
des expresarse por un sistema algebraico de ecuaciones simultaneas con un numero
limitado de incognitas3
Figura 4.1: Vista en planta techo en forma de cono con abertura
3Referencia [7] pagina 03).
32
4.1.2. Estructuras de simetrıa axial
Las estructuras de revolucion representan un alto porcentaje en las estructuras
de uso comun en ingenierıa, entre ellos se puede mencionar: Los depositos para agua,
torres de enfriamiento, muros cilındricos, silos, cupulas, vasijas de presion, techos de
edificaciones especiales(referencia [4] pagina 244), etc.
4.1.2.1. Estructura a analizar
Para justificar los resultados de Sap2000 en la presente tesis se analizara un
modelo alternativo del techo en forma de cono con abertura figuras.(4.1 y 4.2 ), del
auditorio de la Facultad de Ciencia de la Educacion de la Universidad Nacional San
Cristobal de Huamanga, cuyo diametro de la base del cono es D1 = 16m, Altura
H = 1.96m, diametro de la abertura D2 = 2m.
Figura 4.2: Vista en elevacion techo en forma de cono con abertura
4.1.2.2. Modelo de la estructura
Es posible modelar la estructura con distintas formulaciones del Metodo de los
Elementos Finitos, una manera es considerando la formulacion como Solido de Re-
volucion4 debido a que la estructura es simetrico respecto al eje z del sistema de
referencia figura(4.2), en la cual se elige una seccion caracterıstica de revolucion tal
como muestra la figura fig.(4.3 ), para esta seccion sera necesario girar Arc = 360o
grados sexagesimales para formar la estructura entera. definido la seccion carac-
terıstica de revolucion se le asignara todas las condiciones a las que se encuentra
sometido la estructura completa figura(4.4) y se analizara sobre esta seccion plana.
4El tema se encuentra en los libros de la referencia [8] capıtulo 6, [4] capıtulo 6, [5] capıtulo 4,
[27] Reglamento Nacional de Edificaciones. Institulo de la Construccion y Gerencia,
2006.
91
Parte VI
Anexos
92
Apendice A
Codigo fuente ”esaSAP”
A.1. Codigo fuente clase SapApi-Asolid
1 class SapApi Asol id2 {3 // Implementa l a i n t e r f a z en un ob je to4 SAP2000 . SapObject SapObjeto = new SAP2000 . SapObject ( ) ;5 long r e t ;6 public void AbrirSap2000 ( )7 {8 /∗9 ∗ Metodo para i n i c i a l i z a r SAP2000 y c r ea r un modelo nuevo en
blanco10 ∗ e s t e metodo es gene ra l11 ∗/12 SapObjeto . App l i c a t i onSta r t (SAP2000 . eUnits . kgf m C , true , ”” ) ;13 r e t = SapObjeto . SapModel . In i t i a l i z eNewMode l (SAP2000 . eUnits .
kgf m C ) ;14 r e t = SapObjeto . SapModel . F i l e . NewBlank ( ) ;15 }16
17 void Ref r e s ca r ( )18 {19 // a c t u a l i z a e l e spac i o modelo de SAP200020 bool Window = fa l se ;21 r e t = SapObjeto . SapModel . View . RefreshView (0 , ref Window) ;22 // r e t = SapObjeto . SapModel . View . RefreshWindow (0) ;23
24 }25
26 public void Cerrar ( )27 {28 // c i e r r a l a a p l i c a c i o n29 SapObjeto . App l i ca t ionEx i t ( fa l se ) ;30 SapObjeto . SapModel = null ;31 SapObjeto = null ;32 }33
93
34 public void Def in i rProp iedad (double Pe , double e , double u)35 {36 /∗ Metodo para d e f i n i r una propiedad en 2D t ipo Aso l id37 ∗ Argumentos :38 ∗ name : nombre para l a propiedad39 ∗ Pe : peso e s p e c ı f i d e l mate r i a l40 ∗ e : modulo de e l a s t i c i d a d de l mate r i a l [ kg f /m2]41 ∗ u : c o e f i c i e n t e de po i s son42 ∗ a : c o e f i c i e n t e de expansi on t e rmico43 ∗ Temp:44 ∗/45 // crea e l mate r i a l46 SAP2000 . eMatType Mater ia l = SAP2000 . eMatType .MATERIAL CONCRETE;47 r e t = SapObjeto . SapModel . PropMateria l . Se tMater ia l ( ”MyMaterial ” ,
Mater ia l , −1, ”” , ”” ) ;48 // peso e s p e c ı f i c o de l concre to49 r e t = SapObjeto . SapModel . PropMateria l . SetWeightAndMass ( ”
MyMaterial ” , 1 , Pe , 0) ;50
51 // d e f i n e prop iedades para mate r i a l i s o t r o p o52 r e t = SapObjeto . SapModel . PropMateria l . SetMPIsotropic ( ”
MyMaterial ” , e , u , 9 .900E−06, 0) ;53 // d e f i n e propiedad de s o l i d o ax ixymetr i co54 r e t = SapObjeto . SapModel . propArea . SetAso l id ( ”MyAsolid” , ”
58 public void ZUCS(double Z , double Tp, double S , double U, double R,double Ti , double vT , double Tf )
59 {60 /∗ Metodo para d e f i n i r l a a c e l e r a c i o n pseudo e s p e c t r a l con e l
reglamento peruano E03061 ∗ Z : Factor de zona62 ∗ Tp: Ace l e rac i o n fundamental de l su e l o63 ∗ S :64 ∗ C: Factor de a m p l i f i c a c i o n s ı sm i ca65 ∗ U: Categor ıa d e d i f i c a c i o n e s66 ∗ R:67 ∗/68
69 double C, n , Sao ;70 System . Array T; System . Array Sa ;71 //numero de e lementos de l a r r e g l o72 n = ( Tf − Ti ) / vT + 1 ;73 // i n i c i a l i z a n d o l o s v e c t o r e s con n elementos74 T = new double [ ( int )n ] ; Sa = new double [ ( int )n ] ;75 // i n s e r t a e lementos a l o s v e c t o r e s76 for ( int i = 0 ; i <= Sa . Length − 1 ; i++)77 {78 // tiempo79 T. SetValue ( Ti , i ) ;80 // c o e f i c i e n t e de a m p l i f i c a c i o n s ı sm i ca81 C = 2.5 ∗ (Tp / Ti ) ;82 i f (C > 2 . 5 )83 {84 C = 2 . 5 ;85 }
94
86 // l a a c e l e r a c i o n pseudo e s p e c t r a l Sa [ ad imens iona l ]87 Sao = Z ∗ U ∗ C ∗ S / R;88 Sa . SetValue ( Sao , i ) ;89 // aumenta e l tiempo90 Ti = Ti + vT ;91 }92 // exporta a SAP200093 r e t = SapObjeto . SapModel . Func . FuncRS . SetUser ( ”ZUCS” , T. Length ,
ref T, ref Sa , 0 . 0 5 ) ;94
95 }96
97 public void Def in i rCargas ( )98 {99 /∗
100 ∗ Modulo gene ra l que d e f i n e cargas101 ∗/102 // 1 : Load patern , d e f i n e t i p o s de cargas103 // r e t = SapObjeto . SapModel . LoadPatterns . Add(”LIVE” , SAP2000 .
eLoadPatternType . LTYPE LIVE, 0 , t rue ) ;104 r e t = SapObjeto . SapModel . LoadCases . Add( ”LIVE” , SAP2000 .
eLoadcaseType . LTYPE LIVE, 0 , true ) ;105 // r e t = SapObjeto . SapModel . LoadPatterns . Add(”DEAD” , SAP2000 .
eLoadPatternType .LTYPE DEAD, 1 , t rue ) ;106 r e t = SapObjeto . SapModel . LoadCases . Add( ”DEAD” , SAP2000 .
eLoadcaseType .LTYPE DEAD, 1 , true ) ;107
108 // 2 : Load ca s e s , d e f i n e casos de a n a l i s i s , s o l o f a l t a porsismo
109 // d e f i n e caso de carga de e spe c t r o de repues ta110 // r e t = SapObjeto . SapModel . LoadCases . ResponseSpectrum . SetCase (”
QUAKE”) ;111 r e t = SapObjeto . SapModel . Analys i sCases . ResponseSpectrum . SetCase
( ”QUAKE” ) ;112
113 // propiedades para e l caso de a n a l i s i s por r e spue s ta e s p e c t r a l114 System . Array MyLoadName , MyFunc , MySF, MyCSys , MyAng;115 MyLoadName = new string [ 3 ] {”U1” , ”U2” , ”U3” } ;116 //MyLoadName . SetValue (”U1” , 0) ; MyLoadName . SetValue (”U2” , 1) ;
( 6 . 5 4 , 2) ;123 MyAng = new double [ 3 ] ;124 // d e f i n e e l caso de carga por r e spue s ta e s p e c t r a l125 // r e t = SapObjeto . SapModel . LoadCases . ResponseSpectrum . SetLoads
(”QUAKE” , 3 , r e f MyLoadName , r e f MyFunc , r e f MySF, r e fMyCSys , r e f MyAng) ;
126 r e t = SapObjeto . SapModel . Analys i sCases . ResponseSpectrum .SetLoads ( ”QUAKE” , 3 , ref MyLoadName , ref MyFunc , ref MySF,ref MyCSys , ref MyAng) ;
127
95
128 // 3 : combinaciones de carga129 //SAP2000 . eCType TypeC = SAP2000 . eCType . LoadCase ;130 SAP2000 . eCType TypeC = SAP2000 . eCType . acase ;131 // 1 . 5 (CM) +1.8(CV)132 r e t = SapObjeto . SapModel . RespCombo . Add( ” 1 . 5 (CM) +1.8(CV) ” , 0) ;133 r e t = SapObjeto . SapModel . RespCombo . SetCaseLi s t ( ” 1 . 5 (CM) +1.8(CV)
” , ref TypeC , ”DEAD” , 1 . 5 ) ;134 r e t = SapObjeto . SapModel . RespCombo . SetCaseLi s t ( ” 1 . 5 (CM) +1.8(CV)
” , ref TypeC , ”LIVE” , 1 . 8 ) ;135 // 1 . 2 5 (CM+CV+CS)136 r e t = SapObjeto . SapModel . RespCombo . Add( ” 1 . 2 5 (CM+CV+CS) ” , 0) ;137 r e t = SapObjeto . SapModel . RespCombo . SetCaseLi s t ( ” 1 . 2 5 (CM+CV+CS) ”
, ref TypeC , ”DEAD” , 1 . 2 5 ) ;138 r e t = SapObjeto . SapModel . RespCombo . SetCaseLi s t ( ” 1 . 2 5 (CM+CV+CS) ”
, ref TypeC , ”LIVE” , 1 . 2 5 ) ;139 r e t = SapObjeto . SapModel . RespCombo . SetCaseLi s t ( ” 1 . 2 5 (CM+CV+CS) ”
, ref TypeC , ”QUAKE” , 1 . 2 5 ) ;140 // 1 . 2 5 (CM+CV−CS)141 r e t = SapObjeto . SapModel . RespCombo . Add( ” 1 . 2 5 (CM+CV−CS) ” , 0) ;142 r e t = SapObjeto . SapModel . RespCombo . SetCaseLi s t ( ” 1 . 2 5 (CM+CV−CS) ”
, ref TypeC , ”DEAD” , 1 . 2 5 ) ;143 r e t = SapObjeto . SapModel . RespCombo . SetCaseLi s t ( ” 1 . 2 5 (CM+CV−CS) ”
, ref TypeC , ”LIVE” , 1 . 2 5 ) ;144 r e t = SapObjeto . SapModel . RespCombo . SetCaseLi s t ( ” 1 . 2 5 (CM+CV−CS) ”
, ref TypeC , ”QUAKE” , −1.25) ;145 // 0 . 9 (CM) +1.25(CS)146 r e t = SapObjeto . SapModel . RespCombo . Add( ” 0 . 9 (CM) +1.25(CS) ” , 0) ;147 r e t = SapObjeto . SapModel . RespCombo . SetCaseLi s t ( ” 0 . 9 (CM) +1.25(CS
) ” , ref TypeC , ”DEAD” , 0 . 9 ) ;148 r e t = SapObjeto . SapModel . RespCombo . SetCaseLi s t ( ” 0 . 9 (CM) +1.25(CS
) ” , ref TypeC , ”QUAKE” , 1 . 2 5 ) ;149 // 0 . 9 (CM) −1.25(CS)150 r e t = SapObjeto . SapModel . RespCombo . Add( ” 0 . 9 (CM) −1.25(CS) ” , 0) ;151 r e t = SapObjeto . SapModel . RespCombo . SetCaseLi s t ( ” 0 . 9 (CM) −1.25(CS
) ” , ref TypeC , ”DEAD” , 0 . 9 ) ;152 r e t = SapObjeto . SapModel . RespCombo . SetCaseLi s t ( ” 0 . 9 (CM) −1.25(CS
) ” , ref TypeC , ”QUAKE” , −1.25) ;153 //ENVOLVENTE154 //TypeC = SAP2000 . eCType . LoadCombo ;155 TypeC = SAP2000 . eCType .RCombo;156 r e t = SapObjeto . SapModel . RespCombo . Add( ”ENVOLVENTE” , 1) ;157 r e t = SapObjeto . SapModel . RespCombo . SetCaseLi s t ( ”ENVOLVENTE” ,
ref TypeC , ” 1 . 5 (CM) +1.8(CV) ” , 1) ;158 r e t = SapObjeto . SapModel . RespCombo . SetCaseLi s t ( ”ENVOLVENTE” ,
ref TypeC , ” 1 . 2 5 (CM+CV+CS) ” , 1) ;159 r e t = SapObjeto . SapModel . RespCombo . SetCaseLi s t ( ”ENVOLVENTE” ,
ref TypeC , ” 1 . 2 5 (CM+CV−CS) ” , 1) ;160 r e t = SapObjeto . SapModel . RespCombo . SetCaseLi s t ( ”ENVOLVENTE” ,
ref TypeC , ” 0 . 9 (CM) +1.25(CS) ” , 1) ;161 r e t = SapObjeto . SapModel . RespCombo . SetCaseLi s t ( ”ENVOLVENTE” ,
ref TypeC , ” 0 . 9 (CM) −1.25(CS) ” , 1) ;162
163 }164
165 public void MasaEstructura ( )166 {167 /∗ Conf igura para l a s c o n s i d e r a c i o n e s de masa ∗/168 System . Array MyLoadPat = new string [ 2 ] { ”DEAD” , ”LIVE” } ;
96
169 System . Array MySF = new double [ 2 ] { 1 , 0 .25 } ;170 r e t = SapObjeto . SapModel . PropMateria l . SetMassSource (3 , 2 , ref
201 {202 //modulo para a s i gna r cargas de pr e s i o n a s u p e r f i c i e s .203 // carga muerta204 r e t = SapObjeto . SapModel . AreaObj . SetLoadSur facePressure (MyArea ,
222 double Xmax, Ymax, Zmax , Xmin , Ymin , Zmin ;223 // Asigna sopo r t e s en l a base224 System . Array Value = new bool [ 6 ] { true , false , true , false ,
false , fa l se } ;225 double a = (R1 / NroDiv12 ) / 2 ;226 Xmax = R1 + a ; Xmin = R1 − a ;227 Ymax = 0 ; Ymin = 0 ;228 Zmax = Espesor ; Zmin = 0 ;229 r e t = SapObjeto . SapModel . Se lectObj . CoordinateRange (Xmin , Xmax,
Ymin , Ymax, Zmin , Zmax , false , ” Global ” , false , true , false, false , false , fa l se ) ;
230 r e t = SapObjeto . SapModel . PointObj . Se tRes t ra in t ( ” Al l ” , ref Value, SAP2000 . eItemType . Se l e c t edObje c t s ) ;
231 r e t = SapObjeto . SapModel . Se lectObj . C l e a r S e l e c t i o n ( ) ;232 Re f r e s ca r ( ) ;233 }234
235 public void AsignarSoportesEnCentro (double R1 , double Altura ,double Espesor , int NroDiv12 )
236 {237 double Xmax, Ymax, Zmax , Xmin , Ymin , Zmin ;238 // Asigna sopo r t e s en l a base239 System . Array Value = new bool [ 6 ] { true , false , false , false ,
false , fa l se } ;240 double a = (R1 / NroDiv12 ) / 2 ;241 Xmax = 0 + a ; Xmin = 0 − a ;242 Ymax = 0 ; Ymin = 0 ;243 Zmax = Altura + Espesor ; Zmin = Altura ;244 r e t = SapObjeto . SapModel . Se lectObj . CoordinateRange (Xmin , Xmax,
Ymin , Ymax, Zmin , Zmax , false , ” Global ” , false , true , false, false , false , fa l se ) ;
245 r e t = SapObjeto . SapModel . PointObj . Se tRes t ra in t ( ” Al l ” , ref Value, SAP2000 . eItemType . Se l e c t edObje c t s ) ;
246 r e t = SapObjeto . SapModel . Se lectObj . C l e a r S e l e c t i o n ( ) ;247 Re f r e s ca r ( ) ;248 }249
250 public void Anal i zar ( string NombreArchivo )251 {252 //Modulo para a n a l i z a r l a e s t r u c t u r a253 // grados de l i b e r t a d cons ide rados en e l a n A ¡ l i s i s254 System . Array GDL = new bool [ 6 ] { true , false , true , false , true
, fa l se } ;255 r e t = SapObjeto . SapModel . Analyze . SetActiveDOF ( ref GDL) ;256 // crea un modelo de a n a l i s i s257 r e t = SapObjeto . SapModel . Analyze . CreateAnalys isModel ( ) ;
98
258 // opc iones de l s o luc i onador de ecuac ione s de SAP2000259 // r e t = SapObjeto . SapModel . Analyze . SetSo lverOpt ion (1 , true , ”
DEAD”) ;260 //Guarda modelo261 r e t = SapObjeto . SapModel . F i l e . Save ( ”D:\\FEM APISAP PRUEBA\\” +
NombreArchivo ) ;262 // a n a l i s i s263 r e t = SapObjeto . SapModel . Analyze . RunAnalysis ( ) ;264 // Sa l ida de r e s u l t a d o s265 r e t = SapObjeto . SapModel . Resu l t s . Setup .
DeselectAllCasesAndCombosForOutput ( ) ;266 r e t = SapObjeto . SapModel . Resu l t s . Setup . SetCaseSelectedForOutput
( ”DEAD” , true ) ;267 }268 }
A.2. Codigo fuente ”esaSAP”
1 using System ;2 using System . C o l l e c t i o n s . Gener ic ;3 using System . ComponentModel ;4 using System . Data ;5 using System . Drawing ;6 using System . Linq ;7 using System . Text ;8 using System . Windows . Forms ;9
10 namespace AsolidCono11 {12 public p a r t i a l class AsolidCono : Form13 {14 // ob j e to SAP2000 para toda l a c l a s e der ivada AsolidCono15 SapApi Asol id MySap ;16 // ind i cador para AbrirSAP2000 o c r ea r un modelo17 // i n t a = 0 ;18 // dimens iones de l cono19 public stat ic double Altura , R1 , Espesor , R2 ;20 // d i v i s i o n de l a s e c c i o n de r e v o l u c i o n21 // pub l i c s t a t i c double Var iac i on ; Este desaparece22 public stat ic int Nrodiv12 , Nrodiv13 ;23 // propiedad de m a t e r i a l e s24 public stat ic double PesoEsp , Rconcreto , Coe fpo i s son ; //
Coeftermico ;25 // cargas26 public stat ic double Cargamuerta , Cargaviva ;27 // func i on a c e l e r a c i o n pseudo e s p e c t r a l28 public stat ic double Z , Tp, S , U, R, vT , Tf ;29 // i n d i c a l a forma de l a e s t r u c t u r a30 /∗ 1 : cono completo31 ∗ 2 : cono con abertura32 ∗ 3 : domo completo33 ∗ 4 : como con abertura34 ∗ . . . . . y s i gue35 ∗/
99
36 int FormaEstructura ;37
38 public AsolidCono ( )39 {40 In i t i a l i z eComponent ( ) ;41 // e s t r u c t u r a predeterminada cono completo42 FormaEstructura = 1 ;43 txtR2 . Enabled = fa l se ;44 }45
46 private stat ic string Mensaje ( int a )47 {48 switch ( a )49 {50 case 1 :51 return ” Altura de l cono , i n d e f i n i d o ” ;52 case 2 :53 return ”Radio ( r1 ) de l cono , i n d e f i n i d o ” ;54 case 3 :55 return ” Espesor de l cono , i n d e f i n i d o ” ;56 case 4 :57 return ”Numero de Div1−2, i n d e f i n i d o ” ;58 case 5 :59 return ”Numero de Div1−3, i n d e f i n i d o ” ;60 case 6 :61 return ” E l i j a l a forma de e s t r u c t u r a ” ; //ya no
e x i s t e v a r i a c i o n62 case 7 :63 return ”Peso E s p e c ı f i c o , i n d e f i n i d o ” ;64 case 8 :65 return ” f ’ c , i n d e f i n i d o ” ;66 case 9 :67 return ” C o e f i c i e n t e de Poisson , i n d e f i n i d o ” ;68 case 10 :69 return ”Radio ( r2 ) de l cono , i n d e f i n i d o ” ; // anadido
rad io 270 case 11 :71 return ” carga muerta , i n d e f i n i d o ” ;72 case 12 :73 return ” carga viva , i n d e f i n i d o ” ;74 case 13 :75 return ”Z , i n d e f i n i d o ” ;76 case 14 :77 return ”Tp, i n d e f i n i d o ” ;78 case 15 :79 return ”S , i n d e f i n i d o ” ;80 case 16 :81 return ”U, i n d e f i n i d o ” ;82 case 17 :83 return ”R, i n d e f i n i d o ” ;84 case 18 :85 return ”vT , i n d e f i n i d o ” ;86 case 19 :87 return ”Tf , i n d e f i n i d o ” ;88 case 20 :89 return ” . . . y s i gue ” ;90 default :91 return ”Todo Bien” ;
100
92 }93 }94
95 private stat ic void MostrarMensaje ( string t exto )96 {97 MessageBox . Show( texto , ”AsolidCono” , MessageBoxButtons .OK,
MessageBoxIcon . In format ion ) ;98 }99
100 private bool Veri f i carArgumentos ( )101 {102 // ordena argumentos y v e r i f i c a103 // Def ine e l cono104 // Altura de l cono105 i f ( txtAltura . Text == ”” )106 {107 MostrarMensaje ( Mensaje (1 ) ) ;108 return true ;109 }110 Altura = double . Parse ( txtAltura . Text ) ;111 //Radio de l cono112 i f ( txtR1 . Text == ”” )113 {114 MostrarMensaje ( Mensaje (2 ) ) ;115 return true ;116 }117 R1 = double . Parse ( txtR1 . Text ) ;118 // Espesor de l cono119 i f ( txtEspesor . Text == ”” )120 {121 MostrarMensaje ( Mensaje (3 ) ) ;122 return true ;123 }124 Espesor = double . Parse ( txtEspesor . Text ) ;125 // D i v i s i o n e s de l dominio126 // D i v i s i o n e s en 1−2127 i f ( txtNrodiv12 . Text == ”” )128 {129 MostrarMensaje ( Mensaje (4 ) ) ;130 return true ;131 }132 Nrodiv12 = int . Parse ( txtNrodiv12 . Text ) ;133 // D i v i s i o n e s en 1−3134 i f ( txtNrodiv13 . Text == ”” )135 {136 MostrarMensaje ( Mensaje (5 ) ) ;137 return true ;138 }139 Nrodiv13 = int . Parse ( txtNrodiv13 . Text ) ;140 // Var iac i on Li / Lf141 /∗ i f ( tx tVar i ac i on . Text == ””)142 {143 MostrarMensaje ( Mensaje (6 ) ) ;144 re turn true ;145 }146 Var iac ion = double . Parse ( tx tVar iac i on . Text ) ; ∗/147 // Propiedades de l o s m a t e r i a l e s148 // Peso E s p e c ı f i c o
101
149 i f ( t x t P e s o e s p e c i f i c o . Text == ”” )150 {151 MostrarMensaje ( Mensaje (7 ) ) ;152 return true ;153 }154 PesoEsp = double . Parse ( t x t P e s o e s p e c i f i c o . Text ) ;155 // R e s i s t e n c i a de l concre to156 i f ( txtRes i sConcreto . Text == ”” )157 {158 MostrarMensaje ( Mensaje (8 ) ) ;159 return true ;160 }161 Rconcreto = double . Parse ( txtRes i sConcreto . Text ) ;162 // C o e f i c i e n t e de Poisson163 i f ( tx tCoe fpo i s son . Text == ”” )164 {165 MostrarMensaje ( Mensaje (9 ) ) ;166 return true ;167 }168 Coefpo i s son = double . Parse ( tx tCoe fpo i s son . Text ) ;169 // C o e f i c i e n t e de expansi on t e rmico era170 // ahora es e l rad io f i n a l , r2171 i f ( txtR2 . Text == ”” )172 {173 MostrarMensaje ( Mensaje (10) ) ;174 return true ;175 }176 R2 = double . Parse ( txtR2 . Text ) ;177 // cargas178 // carga muerta179 i f ( txtCargamuerta . Text == ”” )180 {181 MostrarMensaje ( Mensaje (11) ) ;182 return true ;183 }184 Cargamuerta = double . Parse ( txtCargamuerta . Text ) ;185 //Carga viva186 i f ( txtCargaviva . Text == ”” )187 {188 MostrarMensaje ( Mensaje (12) ) ;189 return true ;190 }191 Cargaviva = double . Parse ( txtCargaviva . Text ) ;192 // pub l i c s t a t i c double Z , Tp, S , U, R, vT , Tf ;193 // Funcion a c e l e r a c i o n Pseudo e s p e c t r a l194 //Z195 i f ( txtZ . Text == ”” )196 {197 MostrarMensaje ( Mensaje (13) ) ;198 return true ;199 }200 Z = double . Parse ( txtZ . Text ) ;201 //Tp202 i f ( txtTp . Text == ”” )203 {204 MostrarMensaje ( Mensaje (14) ) ;205 return true ;206 }
102
207 Tp = double . Parse ( txtTp . Text ) ;208 //S209 i f ( txtS . Text == ”” )210 {211 MostrarMensaje ( Mensaje (15) ) ;212 return true ;213 }214 S = double . Parse ( txtS . Text ) ;215 //U216 i f ( txtU . Text == ”” )217 {218 MostrarMensaje ( Mensaje (16) ) ;219 return true ;220 }221 U = double . Parse ( txtU . Text ) ;222 //R223 i f ( txtR . Text == ”” )224 {225 MostrarMensaje ( Mensaje (17) ) ;226 return true ;227 }228 R = double . Parse ( txtR . Text ) ;229 //vT230 i f ( txtVt . Text == ”” )231 {232 MostrarMensaje ( Mensaje (18) ) ;233 return true ;234 }235 vT = double . Parse ( txtVt . Text ) ;236 //Tf237 i f ( txtTf . Text == ”” )238 {239 MostrarMensaje ( Mensaje (19) ) ;240 return true ;241 }242 Tf = double . Parse ( txtTf . Text ) ;243 // . . . . . . . s i guen mas mensajes ( s )244 return fa l se ;245 }246
247 void Procedimiento ( )248 {249 //Metodo para a n a l i z a r en SAP2000250 // v e r i f i c a r argumentos251 i f ( Ver i f i carArgumentos ( ) )252 {253 return ;254 }255 // s i todos l o s argumentos son c o r r e c t o s se e j e c u t a256 // crea ob j e to MySAP2000257 MySap = new SapApi Asol id ( ) ;258 // I n i c i a l i z a o crea nuevo modelo de , segun259 MySap . AbrirSap2000 ( ) ;260 // d e f i n e propiedad de l elemento261 double ModE = 15E7 ∗ Math . Sqrt ( Rconcreto ) ;262 MySap . De f in i rProp iedad ( PesoEsp , ModE, Coe fpo i s son ) ;263 // d e f i n e func i on a c e l e r a c i o n pseudo e s p e c t r a l264 MySap .ZUCS(Z , Tp, S , U, R, 0 . 1 , vT , Tf ) ;
103
265 // d e f i n e cargas , ca sos de a n a l i s i s y combinaciones de carga266 MySap . De f in i rCargas ( ) ;267 //masa de l a e s t r u c t u r a268 MySap . MasaEstructura ( ) ;269 //nombre de l A ¡rea270 string MyArea = ”” ;271
272 switch ( FormaEstructura )273 {274 case 1 : //Cono completo275 // obt i ene nombre de l o s frames r e s u l t a d o de
;279 // devuelve l o s nombres de l o s e lementos cargados280 MySap . Rectangulos4Nodos (MyArea , Nrodiv12 , Nrodiv13 )
;281 // sopo s t e s en l a base282 MySap . AsignarSopotesEnBase (R1 , Espesor , Nrodiv12 ) ;283 // sopo r t e s en e l cent ro284 MySap . AsignarSoportesEnCentro (R1 , Altura , Espesor ,
Nrodiv12 ) ;285 // Anal i zar286 MySap . Ana l i zar ( ”ConoCompleto .SDB” ) ;287 break ;288 case 2 : // cono con abertura289 // obt i ene nombre de l o s frames r e s u l t a d o de
;293 // devuelve l o s nombres de l o s e lementos cargados294 MySap . Rectangulos4Nodos (MyArea , Nrodiv12 , Nrodiv13 )
;295 // sopo s t e s en l a base296 MySap . AsignarSopotesEnBase (R1 , Espesor , Nrodiv12 ) ;297 // sopo r t e s en e l cent ro298 //MySap . AsignarSoportesEnCentro (R1 , Altura , Espesor
, Nrodiv12 ) ;299 // Anal i zar300 MySap . Ana l i zar ( ”ConoConAbertura .SDB” ) ;301 break ;302 case 3 : //domo completo303 break ;304 case 4 : //domo con abertura305 break ;306 }307 }308