回 帖 发 新 帖 刷新版面

主题:此程序为何不执行if语句,望高手赐教。急急急。谢谢。

    dimension v(1000,1000),d(4,4),dt(4,4),c(1000,1000)
    *,x(1000,1000),z(1000,1000),zt(1000,1000)
    *,ztdt(1000,1000),dx(1000,1000)
    *,ztdtc(1000,1000),ztdtcdx(1,1)
       real v,d,dt,c,x,z,zt,vv,dx,ddx,ddz,h,l
    *,xxx,zzz,xxxx,zzzz
    h=1
           L=1
    read*,xxxx,zzzz
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc节点的速度
          do i=1,5
       do j=1,5
           v(i,j)=1600
       enddo
    enddo
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc插值:求任意一点的速度
if(xxxx.ge.1.and.xxxx.le.2.and.zzzz.ge.1.and.zzzz.le.2)then
                 i=int(xxxx/h)+1
          j=int(zzzz/l)+1
          xxx=(i-1)*h
          zzz=(j-1)*l
           d(1,1)=-1
            d(1,2)=2
           d(1,3)=-1
           d(1,4)=0
           d(2,1)=3
           d(2,2)=-5
           d(2,3)=0
           d(2,4)=2
           d(3,1)=-3
           d(3,2)=4
           d(3,3)=1
           d(3,4)=0
           d(4,1)=1
           d(4,2)=-1
           d(4,3)=0
           d(4,4)=0
           dt(1,1)=-1
            dt(1,2)=3
           dt(1,3)=-3
           dt(1,4)=1
           dt(2,1)=2
           dt(2,2)=-5
           dt(2,3)=4
           dt(2,4)=-1
           dt(3,1)=-1
           dt(3,2)=0
           dt(3,3)=1
            dt(3,4)=0
           dt(4,1)=0
           dt(4,2)=2
           dt(4,3)=0
           dt(4,4)=0                              
          c(1,1)=v(i-1,j-1)           
          c(1,2)=v(i,j-1)
          c(1,3)=v(i+1,j-1)
           c(1,4)=v(i+2,j-1)
          c(2,1)=v(i-1,j)
          c(2,2)=v(i,j)
          c(2,3)=v(i+1,j)
            c(2,4)=v(i+2,j)
          c(3,1)=v(i-1,j+1)
          c(3,2)=v(i,j+1)
          c(3,3)=v(i+1,j+1)
          c(3,4)=v(i+2,j+1)
          c(4,1)=v(i-1,j+2)
          c(4,2)=v(i,j+2)
          c(4,3)=v(i+1,j+2)  
          c(4,4)=v(i+2,j+2)                
          ddx=(xxxx-xxx)/h
                 ddz=(zzzz-zzz)/l
                 x(1,1)=ddx**3
          x(2,1)=ddx**2
            x(3,1)=ddx**1
                 x(4,1)=1
          z(1,1)=ddz**3
          z(2,1)=ddz**2
                 z(3,1)=ddz**1
                 z(4,1)=1
          zt(1,1)=z(1,1)
          zt(1,2)=z(2,1)
          zt(1,3)=z(3,1)
          zt(1,4)=z(4,1)    
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 两个矩阵相乘公式,ii为行,jj为列。       
c    ztdt=zt*dt
      do ii=1,1
        do jj=1,4
         ztdt(ii,jj)=0
          do k=1,4
            ztdt(ii,jj)=ztdt(ii,jj)+zt(ii,k)*dt(k,jj)
        enddo
      enddo
    enddo
c      dx=d*x    
      do ii=1,4
        do jj=1,1
         dx(ii,jj)=0
        do k=1,4
            dx(ii,jj)=dx(ii,jj)+d(ii,k)*x(k,jj)
        enddo
      enddo
    enddo
c    ztdtc=zt*dt*c=ztdt*c
      do ii=1,1
        do jj=1,4
         ztdtc(ii,jj)=0
        do k=1,4
            ztdtc(ii,jj)=ztdtc(ii,jj)+ztdt(ii,k)*c(k,jj)
        enddo
      enddo
    enddo
c     ztdtcdx=zt*dt*c*dx=ztdtc*dx    
      do ii=1,1
        do jj=1,1
         ztdtcdx(ii,jj)=0
        do k=1,4
            ztdtcdx(ii,jj)=ztdtcdx(ii,jj)+ztdtc(ii,k)*dx(k,jj)
           vv=1/4*ztdtcdx(ii,jj)           
        enddo
      enddo
    enddo
else
     vv=8888    
endif    
print*,vv
end    

回复列表 (共3个回复)

沙发

lz仔细看看if的逻辑条件是否真的能够满足:
(xxxx.ge.1.and.xxxx.le.2.and.zzzz.ge.1.and.zzzz.le.2)==.true. ??
另外 dt矩阵和C矩阵没必要这么赋值,可以用中括号整体赋值

板凳


问题解决了,把vv=1/4*ztdtcdx改为vv=0.25*ztdtcdx就可以了输出结果了。为什么分数不可以呢???????
如输入1.5,1.5满足啊。矩阵赋值现在只会这样一个一个简单的赋值。

3 楼

1/4这样两个整型数相除得到的是0,或者可以1.0/4.0

我来回复

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