1、中文摘要泰 山 学 院 本科毕业论文(设计)基于vb的矩阵位移法Fortran程序可视化开发所 在 学 院 机械与工程学院 专 业 名 称 土木工程 申请学士学位所属学科 工科 年 级 2010级 学生姓名、学号 韩奇孝 2010170214 指导教师姓名、职称 李琦 讲师 完 成 日 期 2014年 月 日 摘要综合Visual Basic语言的良好界面开发和矩阵位移法的Fortran的强大语言运算功能,基于Visual Basic 6.0对矩阵位移法Fortran语言进行混合编程开发,可使矩阵位移法Fortran语言运算的前后处理过程可视化。用VB设计界面,将矩阵位移法Fortran程序编
2、译成可执行程序,运算开始前,打开程序输入所要计算的杆系结构的原始参数,VB和Fortran间的所有数据都通过磁盘文件进行交换,用VB程序中的shell函数异步方式启动可执行程序经行运算,计算结果显示在VB界面上。整个运行过程中,Fortran程序都在后台进行运行,用磁盘文件进行交换海量数据也很经济,效率非常的高。基于VB的矩阵位移法Fortran的可视化开发出的程序,继承了Fortran的强大运算功能和VB的良好界面,也避免了Fortran程序在DOS环境下运行时输入数据容易出错和计算结果输出繁琐的缺点。方便非专业的编程人员灵活运用计算机进行杆件结构的矩阵位移法运算。关键词:Visual Ba
3、sic语言;矩阵位移法;Fortran语言;可视化IIAbstreactAbstract Integrated Visual Basic language interface development and goodmatrix displacement method of Fortran language powerful computing capabilities, based on Visual Basic 6.0 for the matrix displacement method mixed Fortran programming language development, bef
4、ore and after the treatment process can Fortran language computing matrix displacement method of visualization . Design interface with VB , Fortran matrix displacement method will be compiled into an executable program , before the operation began , the original input parameter to open the program t
5、o calculate the truss structure , all data between VB and Fortran are exchanged via a disk file , VB program shell function asynchronously executable program started by the line operator , the result is displayed on the VB interface. Throughout the operation , Fortran programs running in the backgro
6、und , huge amounts of data to be exchanged with a disk file is also very economical , efficiency is very high . VB-based matrix displacement method Fortran visualization developed program , inherited a good interface Fortran powerful computing capabilities and VB , but also avoids the disadvantages
7、of the input data Fortran program running under DOS environment prone to error and calculate the resulting output tedious . Non-professional programmers to facilitate flexible use of computer matrix displacement method calculation rod structure. Keywords : Visual Basic language ; matrix displacement
8、 method ; Fortran language ; visualization目录1 绪论11.1 研究的目的和意义11.2 基于VB的矩阵位移法Fortran的可视化开发研究的方法概述21.3 本文的主要工作22 简介矩阵位移法程序化的实现42.1 基本信息的输入42.1.1 结构的几何形状及材料特性数据52.1.2 结构的约束情况数据52.1.3 荷载情况数据62.2 刚度矩阵62.2.1 单元刚度矩阵62.2.2 总刚度矩阵72.2.3 边界条件的处理72.2.4 非结点荷载的等效82.2.5 建立求解刚度方程82.2.6 计算杆端力82.3 矩阵位移法Fortran程序113 基
9、于VB 6.0的矩阵位移法Fortran的可视化开发143.1 基于VB 6.0 的矩阵位移法Fortran的混合编程及可视化开发143.1.1 基于VB 6.0的Fortran混合编程的两种方法及对比143.1.2 基于VB 6.0的矩阵位移法Fortran的可视化开发183.2 应用实例20平面刚架计算程序举例和简要说明20泰山学院本科毕业设计1 绪论1.1 研究的目的和意义 矩阵位移法在结构力学中用于解决杆系结构的位移和内力的重要方法,它以 位移法为理论基础。矩阵位移法的基本方法是:以结点位移为基本未知量,将要分 析的结构离散成一个组件,然后通过分析单元和组装单元,简单列出刚度方程,得
10、到了杆端力和结点位移。其实质是一种位移法的延伸,是将矩阵运算运用到位移 法中,使之可以编制成数值计算的计算机程序。借助计算机强大的运算能力,使难 以完成大量的未知变量来解决,容易实现。因为矩阵位移法编程的存在,让更多的 结构力学问题变得简单,能够解决更复杂的问题。矩阵位移法通常使用Fortran语言编写的计算机程序。Fortran语言起源于 1950年代,是最早适用于科学计算的计算机语言。Fortran语言的高度标准化、 易于程序交换和交易优化,而且具有非常精确的数据结构。虽然经过多年的发展, 应用Fortran语言有了很大发展。并与C+语言相比,Fortran编程具有C+所有的重要功能。然而
11、,Fortran语言有其本身无法克服的缺点。图形处理能力弱,人机界面交换僵硬,而且应该运行在DOS环境下,黑色的屏幕和可怜的兼容性都无法满足需求。相对于编程人员不熟悉,使用起来更费力又容易出错。矩阵位移法 只在Fortran语言计算结果,及其复杂的计算过程和结果图形表达不好,应用和推广方面非常不利。Visual Basic是微软开发协助开发环境的事件驱动编程语言, 它来自BASIC编程语言,是现今全球使用人数最多的编程语言。VB的图形用户界面(GUI)和快速应用程序开发(RAD)系统,可以轻松创建ActiveX控件,也很容易地使用DAO、RDO、ADO连接数据库。程序员可以很容易地使用VB组件
12、来快速创建应用程序。 经过多年的发展,VB 6.0已经很成熟,是一个基于Windows平台的开发工具,以其灵活简单,易于使用和功能强大,界面友好等优点,获得了非计算机专业的程序员的喜爱。然而,Visual Basic 6.0也有自己的缺点,如计算能力差,执行速度慢等等。通过基于Visual Basic 6.0对矩阵位移法 Fortran语言进行开发,实现在Windows环境下运行,同时也实现了既可以延续矩阵位移法Fortran语言高效的计算能力,又矩阵位移法程序界面更友好。非专业程序员灵活的借助计算机运行矩形位移法,在计算机的帮助下也可以简单和直接的获取计算结果,提高项目运作的工作效率。1.2
13、 基于VB的矩阵位移法Fortran的可视化开发研究的方法概述基于VB 6.0的矩形位移法Fortran的界面化开发设计采用矩阵位移法为基本原理,通过Visual Basic 6.0和Fortran混合编程的方法,实现矩阵位移法程序的可视化更优化。矩阵位移法的Fortran编程经过多年来的不断开发已经非常成熟,是应用非常广泛的矩阵位移法计算程序。本设计首先把矩阵位移法Fortran编程语言转化成VB 6.0可以直接调用的可执行文件,实现在VB 6.0中执行矩阵位移法Fortran的运算,再基于VB 6.0进行程序可视化的优化。 在第三章中详细说明所用到的VB 6.0直接调用Fortran编程语
14、言的可执行文件的方法、VB 6.0和Fortran的接口、VB调用用Fortran编译的可执行文件(矩阵位移法Fortran可执行文件)、shell函数异步执行和黑屏的解决方案。然后对运算结果进行可视化处理。在WINDOWS平台上,使用VB 6.0软件和FORTAN混合编程计算的矩阵位移法,现成的矩形位移法的前后期的运算输入、输出简单明了,结果可以由图像直观的显示出来。1.3 本文的主要工作本文介绍用Visual Basic 6.0为平台,将矩阵位移法Fortran编程语言转换为Visual Basic 6.0的可执行,生成Visual Basic 6.0的一个子程序。介绍顺序为矩阵位移法的原
15、理和矩阵位移法编程、VB 6.0和Fortran混合编程方法及其对比、基于VB的矩阵位移法Fortran的可视化开发。(1)矩阵位移法程序化的实现部分讨论了矩阵位移法计算机程序实现过程中注意的几个问题:基本信息的输入,刚度矩阵,边界条件处理,非结点荷载的等效,建立求解刚度方程,计算杆端力。提供一些关于如何利用程序解决刚架、桁架、连续梁的位移和内力等问题的帮助(2)对基于Visual Basic 6.0的矩阵位移法Fortran程序进行兼容,制作出可应用的编程程序,并进行可视化前后处理界面。介绍混合编程的主要方法,对混合编程中出现的每一个问题所需要的解决方案进行简要的描述,对在Visual Ba
16、sic 6.0中对于Fortran程序的调用进行简要说明。(3)生成基于VB 6.0的矩阵位移法Fortran软件,达到程序操作简单,数据以文件形式输入,为检查和修改方便,每项数据都可以清晰的显示出来。程序在运行时,自动由输入的数据生成图形,通过图中的各种信息可以很容易检验出信息是否出错。计算结束后,计算结果自动生成图像,达到预测结构承受荷载后的情况。所生成的程序为exe格式,程序小,对计算机没有特殊要求。(4)应用基于Visual Basic 6.0的矩阵位移法的可视化程序进行例题计算,验证程序的正确性和易用性。2 简介矩阵位移法程序化的实现随着工程技术和材料等的发展,工程结构向复杂化、大型
17、化的发展,传统的结构力学运算和分析方法很难进行大型复杂的结构分析任务。上世纪六十年代,随着计算机技术的快速发展和在结构计算方面的应用,矩阵位移法程序化得到了广泛的发展应用,使的结构力学运算和分析可以用计算机来运行,非常的简单方便。矩阵位移法在结构力学中用于解决杆系结构的位移和内力的重要方法,它以位移法为理论基础。矩阵位移法的基本方法是:以结点位移为基本未知量,将要分析的结构离散成一个组件,然后通过分析单元和组装单元,简单列出刚度方程,得到了杆端力和结点位移。其实质是一种位移法的延伸,是将矩阵运算运用到位移法中,使之可以编制成数值计算的计算机程序。借助计算机强大的运算能力,使难以完成大量的未知变
18、量来解决,容易实现。因为矩阵位移法编程的存在,让更多的结构力学问题变得简单,能够解决更复杂的问题。这里介绍实现矩阵位移法计算机程序话的思路和方法2.1 基本信息的输入使用矩阵位移法解决问题时,首先要进行结构的离散化,这一步是需要手动完成的。首先用结点将结构进行划分,得到一系列的结点和单元,按顺序(一般用顺时针)对结点和单元进行编号(如图1,2)。这样就可以用数字和编号描述结点坐标,单元的材料特性、所取截面的特征、支撑信息和所受荷载信息等等,为矩阵位移法分析、计算和程序应用提供信息。需要向程序提供数据有以下信息:2.1.1 结构的几何形状及材料特性数据这部分包括所选取的结点数量、坐标的位置、单元
19、数、单位编号,单元的截面性质和单元的弹性模量。由于铰结点不能确定,因此相对转动的位置不确定,需要以上在同一位置处编不只一个号,如图1中3、4号结点。一般根据要输入结点和单元编号的顺序依次输入。需要注意的是,在连续梁和框架分析不考虑轴向变形,经常对程序不做任何改动,而是在数据输入相应的结构单元设置为更大的值,可以扩大lOOO倍;没有弯曲变形的桁架,可以设置为O。2.1.2 结构的约束情况数据结构的约束情况数据包括:约束的数量、约束处结点和方向,桁架的每个结点,包括自由端,也可视为角度位移O,如图中的5、6结点,不需要修改源程序来提高程序的通用性。2.1.3 荷载情况数据荷载分为结点荷载和非结点荷
20、载。在输入时,两者各有差别。结点荷载需要输入荷载力作用的结点、方向和大小。而非结点荷载则需输入荷载作用单元编号、荷载的类型、荷载的作用位置,大小和方向。2.2 刚度矩阵2.2.1 单元刚度矩阵单元刚度矩阵分为局部坐标下的单元刚度矩阵和整体坐标下的单元刚度矩阵。这里,我们把局部坐标下的单元刚度矩规格为统一的基本形式(假设杆的弯矩顺时针为正)通常条件下,我们在手算时,对于不同的单元刚度矩阵可以简化成不同形式,比如不考虑轴向变形的钢架、有约束的钢架和桁架。对于提高程序计算速度的意义来说,根据计算机擅长重复的计算,刚度矩阵化简的意义并不不大,而起在编写程序的时候也很麻烦。所以在电话算中,一般采用统一的
21、单元刚度矩阵。把一个单元设置为两个结点,表示成i、j。单元的局部坐标系中可将沿i、j 的方向默认为局部坐标x 方向,这样在单元信息输入时就自动定义了各单元的局部坐标。至于整体坐标可取水平方向为x 方向。然后由局部矩阵向整体刚度矩阵调成。根据生成的局部坐标的单元刚度矩阵后向整体坐标的刚度矩阵转换时,只要根据单元基本信息就可以计算出与水平方向的夹角,生成新的刚度矩阵T,做矩阵乘法,就得到了整体坐标下的单元刚度矩阵。2.2.2 总刚度矩阵 总刚度矩阵反映了整个结构的基础上引入边界条件的刚度而形成的整体刚度矩阵法。根据形成的原因分为先处理法和后处理法。结构刚度矩阵形成前引入位移条件称为的前处理方法;结
22、构刚度矩阵形成之后引入位移情况称为后处理法。当程序处理后,通常使用时,采取的后处理法,由单元刚度矩阵对号入座,形成总刚度矩阵。2.2.3 边界条件的处理具体方法为单独开辟4个列宽的与结构矩阵存储有关结点的约束数据。第一列存放结点的编号,第二、三、四列存放用1、0表示的控制的结点各方向的约束情况。比如用l 代表有约束,0表示无约束。固端支座的约束信息就可以表示成1、1、1。本设计在处理界面时更简化,直接在VB 6.0中存储了各种约束条件的数据,分为三列:约束号、结点号、约束类型(包括固定支座、铰支座、水平辊轴支座、竖直辊轴支座、水平滑移制作、竖直滑移支座)2.2.4 非结点荷载的等效前边在我们已
23、经提到的数据输入,结构的荷载因为作用位置的不同,分为结点荷载和非结点荷载。结点荷载在输入时处理起来相对简单,可以直接形成了结点力矢量进行输入计算。但非结点荷载变化需要处理才可以成为结点荷载的矩阵进行运算。常用的方法为生成非结点荷载的单独的子程序,用生成子程序求解非结点荷载作用下的单元固端力。这样处理后,不论杆件两端的约束情况如何,统一看作固定端,用位移法计算杆端支座反力,再将反力反向加在杆端,作为等效结点荷载。非负载共同结点有四种形式,可以采用加载一个程序来解决编码来区分荷载的类型的类型。在根据荷载作用的结点、位置、大小、方向作为参数来选择计算式,从而求出各单元下的非结点荷载。这样就可以得到结
24、点荷载和等效的非结点荷载叠加起来的向量为P的总负荷。2.2.5 建立求解刚度方程各结点的位移是刚度方程中的未知量。刚度方程是一个多元的线性方程组P = K ,用易于实现程序化的高斯消元法、矩阵分解法进行开发运算。这样就把复杂,重复的运算用计算机来解决,实现矩阵位移法的程序化。2.2.6 计算杆端力根据得到的结点位移,利用下列公式就可以求出单元坐标系中单元杆端位移产生的单元杆端力:注意的是最终结果的确定是根据由单元的非结点荷载产生的单元固端力叠加确定的各单元的杆端力。公式拓展为:+这一步利用矩阵乘法进行运算。矩阵乘法程序化也很容易实现,这样就把复杂,重复的运算用计算机来解决,实现矩阵位移法的程序
25、化。 例题:求解图l 所示刚架内力的数据输入和结果输出。 输入数据:3,5,3,l,l “单元数、结点数、特殊点数、结点荷载数目、非结点荷载数目”0.0,0.0,4.0,0.0,0.0,4.0,0.0,4.0,4.0,4.0 “各结点坐标(按结点编号顺序输入)”l,3,0.3l2E + 07,0.4l6E + 05,4,5,0.3l2E + 07,0.4l6E + 05,2,5,0.3l2E + 07,0.4l6E + 05“各单元定义,包括单元两端结点编号、的值(按单元编号顺序输入)”l,l,l,l,2,l,l,l,4,3,3,0 “约束信息(l 代表有约束,0 代表无约束)”4.l,30.
26、0 “结点荷载信息”l.0,l.0,4.0, - 20.0 “非结点荷载信息(正负号号代表方向)”结果输出:NE = 3 NJ = 5 NS = 3 NPJ = l NPF = l NODAL POINT COORDINATES NODE X Y l .0000 .0000 2 4.0000 .0000 3 .0000 4.0000 4 .0000 4.0000 5 4.0000 4.0000ELEMENT DATANUMBER NODE - I NODE - J EA EI 1 l 3 .3l2000E + 07 .4l6000E + 05 2 4 5 .3l2000E + 07 .4l60
27、00E + 05 3 2 5 .3l2000E + 07 .4l6000E + 05SPECISL NODAL POINT DATA NUMBER XX YY ZZ 1 l l l 2 l l l 4 3 3 0NODAL POINT LOAD DATA NODE PX - PY - PZ 4.l 30.0000NO - NODAL POINT LOAD DATA NUMBER CLASS RANGE LOAD l. l. 4.000 - 20.000DISPLACEMENTS OFNODESELEMENT NUMBER V SATA l .000000E + 00 .000000E + 00
28、 .000000E + 00 2 .000000E + 00 .000000E + 00 .000000E + 00 3 .94l2l2E - 02 .l99973E - 04 .288852E - 02 4 .94l2l2E - 02 .l99973E - 04 - .989866E - 03 5 .935873E - 02 - .l99973E - 04 200973E - 02ELEMENT THRUSE/ SHEAR/MOMENT ELEMENT NUMBER THRUSE SHEAR MOMENT 1 Nl = - l5.5979 Ql = 68.3536 Ml = - ll3.4l
29、46 N2 = l5.5979 Q2 = ll.6464 M2 = .0000 2 Nl = 4l.6464 Ql = - l5.5979 Ml = .0000 N2 = - 4l.6464 Q2 = l5.5979 M2 = 62.39l5 3 N1 = 15.5979 Q1 = 41.6464 M1 = - 104.1939 N2 = - 15.5979 Q2 = - 41.6464 M2 = - 62.39152.3 矩阵位移法Fortran程序矩阵位移法中的整体刚度方程为F= (1)式中为nn方阵,是杆系的整体刚度矩阵。n= ,s为结点位移的自由度数;m为结点数。拉伸(压缩)、扭转、s
30、=1;弯曲s=2;弯扭组合s=3;平而析架s=2;平而刚架s=3等等。F为结点载荷列阵;为结点位移列阵。 单元的基本变形有三种:拉(压)、扭转、弯曲。一般的变形形式都可以认为是这三种基本变形的组合。整体刚度矩阵可由单元刚度矩阵叠加而成。因为拉(压)与扭转的单元刚度矩阵形式相同,这样就只有两种单元刚度矩阵。整体刚度矩阵形成后,需要把单元刚度矩阵的各元素放到相应位置,在操作时是十分繁琐的。单元较多时更是让人难以忍受,很容易出错。所以要进行以下处理。对于析架、刚架等,各单元轴线方向各异。在整体坐标中的单元刚度矩阵不能直接写出。但在以各单元轴线为x轴的局部坐标中的单元刚度矩阵可由基本变形的单元刚度矩阵
31、直接写出,然后得到整体坐标系下的单元刚度矩阵: (2)注:式中为整体坐标中的单元刚度矩阵;为坐标变换矩阵;为坐标变换矩阵的转置矩阵;为局部坐标中单元刚度矩阵。根据叠加得到整体刚度矩阵.整体刚度方程式(1)也可写成: = (1) 对于实际结构都可以知道有一定数量的结点位移。假定有p个位移已知,则要在式(1)中将结点位移的项移到方程的右边并将对应的行由方程中去掉。这时方程的阶数变为r=n-p.即得到方程 (3) 通过这方程解出未知位移,再加上已知位移就得到了所有结点位移。再将其代入原方程中可解出未知结点力,再加上已知结点力即可得到全部结点力.单元结点力= (4)式中为单元结点位移,由中相应元素组成
32、。 对于桁架、刚架等应给出局部坐标中的结点力和结点位移 (5) (6) 由局部坐标中的,-u点力和结点位移就可以进行单元的强度和刚度计算。将上述过程写成了图1所示的程序,可以解决:拉伸(压缩)、扭转、弯曲、拉扭组合、拉弯组合、弯扭组合、拉扭弯组合、平面桁架、平面刚架等9个方面的问题。把已知条件按设定的格式输入就能运算出问题的解。为了便于数据的输入和修改,已知条件要以文件的形式给出。343 基于VB 6.0的矩阵位移法Fortran的可视化开发3.1 基于VB 6.0 的矩阵位移法Fortran的混合编程及可视化开发3.1.1 基于VB 6.0的Fortran混合编程的两种方法及对比 实现 VB
33、 6.0 与 Fortran 的混合编程主要方法有两种:第一种,VB 直接调用可执行文件( 利用Shell函数直接调用Fortran编译出来的可执行文件) ;第二种,利 用 动态 链 接 库 DLL( Dynamic Link Library) 与Fortran混合编程(1)采用VB 6.0直接调用 Fortran 可执行文件的方法 利用 VB 6.0编写程序的界面部分, 后将Fortran 的应用程序编译成可执行的应用程序。计算时, 由VB 6.0应用程序启动由Fortran编译成的可执行文件。在计算结束后, 将计算数据以数字或者图形的形式显示在 VB 6.0 的界面上。程序整个运行过程,F
34、ortran 应用程序编译成的可执行文件一直在后台运行,建立连接接口,通过磁盘文件对 VB 6.0和 Fortran 之间的所有数据进行交换。具体步骤是先在Fortran Power Station 中编写 Fortran 的源程序代码, 并编译成可执行文件。然后在 VB 6.0需要调用时, 利用Shell 函数调用就可以了。Shell 函数语法如下:Shell(pathname, window style )pathname 是可执行文件的程序名, 含有所必需的目录、文件夹、驱动器。Windowstyle 表示在程序运行时,Fortran窗口的样式。例如, 在VB中调用Fortran编译成的
35、可执行文件生成的 work 目录下的计算程序test.exe, 语法如下:Call shell ( D: worktest. exe, vbNormalfocus)此方法适合于交互操作不多的情况。Shell 函数是以异步方式执行的, 这种执行方式使 VB 6.0程序不能等待 Fortran 程序计算结束就继续执行后续的程序, 使最终运算过程错乱,结果非常容易出现错误。(2)调用 Fortran 动态链接库 此方法是将Fortran的源代码分成若干个子程序或函数, 并编译生成.DLL 文件。用VB 6.0编写主程序。在使用时调用编译好的. DLL 文件, 从而实现 VB 6.0和Fortran的
36、混合编程。创建Fortran的动态链接库的源程序必须是子程序或函数, 不能有主程序。还有注意的是,必须明确外部例程的实现机制、调用约定(调用约定就是明确程序如何调用过程, 传递过程以及命名规范)、例程名和参数列表。做到这些,VB 6.0在导入动态链接时才能协调好。调用约定就是明确程序如何调用过程, 传递过程以及命名规范。Fortran Power Station 中三个调用约定: C、ST DCALL 及缺省约定。而VB6.0只有两个调用约定: 缺省约定、 DCALL调用约定。通常, 两种语言统一采用缺省调用约定。具体的声明语句是:! MS ATT RIBUT ES DLLEXPORT : :
37、 name变量传递的缺省方式是“传址”。若变量采用数值传递, 需要在参数前添加ByVal 属性; 而且同时要注意 Fortran 和 VB 6.0之间数据类型的对应关系, 具体见表 1。由于 Fortran 语言的数组变量是从 1开始 , 而VB 6.0数组变量隐含从 0 开始的。 在数组传递时, 如果使用隐含传递,需要注意数组元素的传递次序。如果事先声明数组的上、下限, 则可以免去许多不必要的麻烦。对于多维数组, VB和Fortran都是按列传递的。按照这些规则, 在 VB 对 Fortran 动态链接库源文件的调用过程中, 多维数组一般定义为维数和大小都相同的。这样就可使实现传递时, 只对齐数组第一个元素即可。 VB 6.0引用动态链接库前, 必须先用 Declare语句在模块级声明外部过程。具体的语法是: Public Declare Sub subname