回 帖 发 新 帖 刷新版面

主题:我明明在程序开头定义了Ae,Sey,Iey这三个量,为什么还是提示子程序中的

我明明在程序开头定义了Ae,Sey,Iey这三个量,为什么还是提示子程序中的
Ae=Ae+E/E0*AA(i)
Sey=Sey+E/E0*y(i)*AA(i)
Iey=Iey+E/E0*y(i)*y(i)*AA(i)
编译时提示Ae,Sey,Iey   The shapes of the array expressions do not conform.
希望高手指点下,东西要的比较急,感激不尽

下面附上主程序的开头和子程序
program main
    implicit none
    integer::d,t,k,i,j   
    real::a,b,c      
    real::M,P,P0,Q,xi    
    real::E0,f,A0  
    real::epsi0,epsi,phi0,ee,dM,deta0    
    real::Ae,Sey,Iey,length 

subroutine yei(d,t,k,y,E,E0,Ae,ye,Ie)     !计算弹性区截面特性
    implicit none
    integer::d,t,k,i,j
    real::Ae,Sey,ye,Iey,Ie,E0
    real::E(k),y(k),AA(k)
    real,parameter::pi=3.1415926
    call yi(d,t,k,y)
    Ae=0.0
    Sey=0.0
    Iey=0.0
    do j=1,t,1
       do i=1,360,1
       AA(i+360*(j-1))=0.5*((d-2*t)*0.5+j)**2*pi/180-0.5*((d-2*t)*0.5+j-1)**2*pi/180
       end do
    end do
    do i=1,k,1
        Ae=Ae+E/E0*AA(i)
        Sey=Sey+E/E0*y(i)*AA(i)
        Iey=Iey+E/E0*y(i)*y(i)*AA(i)
    end do
    ye=Sey/Ae
    Ie=Iey-Sey*ye
    if(Ae<=1E-4)then
        write(*,*)"全截面屈服!"
        stop
    end if
    return
end subroutine yei

回复列表 (共1个回复)

沙发

感觉似乎做题某群里看过...
1. 主程序定义的变量, 子程序要传递才能继承过来的.(你省去的部分代码调用过程没看到, 可能是对的)
2. 极可能是这个问题: Ae=Ae+E/E0*AA(i) 这里的E是数组, 你是不是应该写E(i)?

我来回复

您尚未登录,请登录后再回复。点此登录或注册