liruipei 发表于 2014-5-13 11:20:59

子程序中数组定义问题

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

楚香饭 发表于 2014-5-13 11:29:32

syscr_fn 里,对 tm_mt 未定义。这应该是数组吧?数组不能不定义

liruipei 发表于 2014-5-13 14:25:28

定义过了,在这一小短子函数前几行、

楚香饭 发表于 2014-5-13 14:34:15

其他函数中定义的数组,在 syscr_fn 里不能直接使用。请注意,每个变量(数组)都有自己的作用范围。这一点非常重要!

如果你确定你确实定义了,请告诉我在第几行?

liruipei 发表于 2014-5-13 14:51:49

红色的地方
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)           !输出变量

      callinvm_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:12

其他函数中定义的数组,在 syscr_fn 里不能直接使用。请注意,每个变量(数组)都有自己的作用范围。这一点非常重要!

liruipei 发表于 2014-5-13 15:00:36

那这里应该怎么弄?、、这前面的程序应该是对的,是找人调试好的,我修改的是最后的那块的,换了个求积方法,,前面应该没有问题啊····

楚香饭 发表于 2014-5-13 15:02:17

我已经告诉你了,tm_mt 没有定义为数组。

至于如何解决,那看你的想法。我不是你,我不懂你想要做什么。是不是应该定义一下 tm_mt ?

liruipei 发表于 2014-5-13 15:07:22

我试试、、、谢谢你~~~
页: [1]
查看完整版本: 子程序中数组定义问题