Fortran Coder

标题: 子程序中数组定义问题 [打印本页]

作者: liruipei    时间: 2014-5-13 11:20
标题: 子程序中数组定义问题
错误可能在最后的子程序那块、、

new.f90

30.3 KB, 下载次数: 3

错误可能在最后的子程序那块、、


作者: 楚香饭    时间: 2014-5-13 11:29
syscr_fn 里,对 tm_mt 未定义。这应该是数组吧?数组不能不定义
作者: liruipei    时间: 2014-5-13 14:25
定义过了,在这一小短子函数前几行、

作者: 楚香饭    时间: 2014-5-13 14:34
其他函数中定义的数组,在 syscr_fn 里不能直接使用。请注意,每个变量(数组)都有自己的作用范围。这一点非常重要!

如果你确定你确实定义了,请告诉我在第几行?
作者: liruipei    时间: 2014-5-13 14:51
红色的地方
subroutine sysparameter(n)
      use IMSL
          use sys_p
          use mat_p
          use inmatx

      implicit real(8) (a-h,o-z)
          integer n
      dimension tm_mt(n/2,n/2)

      pi=3.1415926d0
            yge=2.058d11                               !弹性模量
          pp=7.810d3                                 !材料密度
      cc=0.20d-3                                 !轴承间隙  0.3    0.25
      ee1=0.06d-3                                !圆盘偏心量    0.09    0.05
          ee2=0.08d-3
      rou1=ee1/cc                                !无量纲偏心率
      rou2=ee2/cc

!!!!  轴承参数
!      brmt=0.25                                  !轴承长径比
      brad=50.0d-3                               !轴承半径
      bl=15.0d-3                           !轴颈长度
      byt=18.16d-3                                !润滑油黏度系数
      sfdrr=78.3d-3                           !油膜半径

      f1=(byt*sfdrr*bl**3)/(cc**2)
!          f1=(byt*brad*bl*((brad/cc)**2)*((bl/(2*brad))**2))    !/bm1    !sommerfeld数/omega

!write(*,*) somm
!!!!  转子参数      
          rleg=1.5d0                     !转子长度
          ra=0.7                              !(1.0/3.0)
          rb=0.5
          rc=rleg-ra-rb
          sa=pi*brad**2

             ris=pi*brad**4.0/2.0                         !转轴的截面惯性矩

!!!!  圆盘参数
          drad1=brad+100.0d-3                               !圆盘1半径  50.0d-3
          dleg1=40.0d-3                               !圆盘1宽度  25.0d-3

          drad2=brad+100.0d-3                               !圆盘2半径  50.0d-3
          dleg2=40.0d-3                               !圆盘2宽度  25.0d-3

!!!!  叶片参数  
      bn1=8.0                                      !叶片数量   第一个圆盘上的
            bll1=500.0d-3                                !叶片长度
      bs1=60.0d-4        !(30.0d-3)*(30.0d-3)                      !叶片截面积
          bha1=20.0d-3                                 !叶片轴向宽度
      zrad1=1.5d-3                                 !拉筋截面半径

          bn2=8.0                                      !叶片数量   第二个圆盘上的
            bll2=500.0d-3                                !叶片长度
      bs2=60.0d-4           !(30.0d-3)*(30.0d-3)                      !叶片截面积
          bha2=20.0d-3                                 !叶片轴向宽度
      zrad2=1.5d-3                                 !拉筋截面半径

      call para_disk_blade_fn(n,drad1,dleg1,bn1,bll1,bs1,bha1,zrad1,   &           !输入变量
                  diskm1,btka1,btkp1,btca1,btcp1,bbeta1,delta1,gtp1,gm1)           !输出变量

      call para_disk_blade_fn(n,drad2,dleg2,bn2,bll2,bs2,bha2,zrad2,   &           !输入变量
                  diskm2,btka2,btkp2,btca2,btcp2,bbeta2,delta2,gtp2,gm2)           !输出变量

      call  invm_fn(n,sa,ra,rb,rc,ris,diskm1,diskm2,gtp1,gtp2,gm1,gm2,tm_mt)     !质量矩阵
                  

          call sysk_fn(n,ris,ra,rb,rc,btka1,btka2,btkp1,btkp2,btca1,btca2,btcp1,btcp2,tkk)   !刚度矩阵  
                  

      call sysc_fn(n,ris,ra,rb,rc,gtp1,gtp2,btca1,btca2,btcp1,btcp2,gm1,gm2,tcc)   !阻尼矩阵

      call syscr_fn(n,rleg,brad,ris,tm_mt)

作者: 楚香饭    时间: 2014-5-13 14:58
其他函数中定义的数组,在 syscr_fn 里不能直接使用。请注意,每个变量(数组)都有自己的作用范围。这一点非常重要!
作者: liruipei    时间: 2014-5-13 15:00
那这里应该怎么弄?、、这前面的程序应该是对的,是找人调试好的,我修改的是最后的那块的,换了个求积方法,,前面应该没有问题啊····
作者: 楚香饭    时间: 2014-5-13 15:02
我已经告诉你了,tm_mt 没有定义为数组。

至于如何解决,那看你的想法。我不是你,我不懂你想要做什么。是不是应该定义一下 tm_mt ?
作者: liruipei    时间: 2014-5-13 15:07
我试试、、、谢谢你~~~




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2