Fortran Coder

查看: 8622|回复: 2
打印 上一主题 下一主题

[数值问题] fortran排错

[复制链接]

3

帖子

2

主题

0

精华

新人

F 币
23 元
贡献
11 点
跳转到指定楼层
楼主
发表于 2017-5-3 23:14:14 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
求各位帮我看看,这问题卡我两三个小时了。下面是我的主程序
[Fortran] 纯文本查看 复制代码
program main !顶盖驱动boltzmann 程序
    implicit none
    real*8 dx,dy,Lx,Ly,dt,c,cs
    integer Nx,Ny
    real*8 Re,niu,U0,rho0
    real*8,allocatable:: rho(:,:)
    real*8,allocatable:: w(:),e(:,:),u(:,:,:)
    real*8 tau
    integer Q
    real*8,allocatable::Fn(:,:,:),Fn_1(:,:,:)
    integer i,j,k
    real*8 feq

    !初始化111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    dx=1.0 !格子的流向长度
    dy=1.0 !格子的垂向长度
    Nx=256 !流向格子数量
    Ny=256
    Lx=dx*Nx !流向长度
    Ly=dy*Ny
    dt=1.0 !时间步长
    c=dx/dt !格子速度
    cs=c/sqrt(3.0) !格子声速
    Re=1000.0 !雷诺数
    U0=0.1 !顶盖速度
    rho0=1.0 !初始密度
    niu=U0*Lx/Re !运动粘性系数
    tau=3.0*niu+0.5 !松弛时间
    Q=9 !速度离散数量
    allocate(rho(Nx,Ny)) !各节点的密度
    allocate(w(Q)) !权系数
    allocate(e(Q,2)) !离散速度
    allocate(u(Nx,Ny,2)) !各节点的速度
    allocate(Fn(Nx,Ny,2)) !迭代后的分布函数
    allocate(Fn_1(Nx,Ny,2)) !迭代前的分布函数
    rho(:,:)=rho0
    w(:)=(/4.0/9,1.0/9,1.0/9,1.0/9,1.0/9,1.0/36,1.0/36,1.0/36,1.0/36/)
    !write(*,*) w !正常情况下应当屏蔽
    e(:,1)=(/ 0,1,0,-1,0,1,-1,-1,1 /)
    e(:,2)=(/ 0,0,1,0,-1,1,1,-1,-1/)
    !write(*,*) e(9,:) !正常情况下应当屏蔽
    u(:,:,:)=0 !各节点速度
    u(:,Ny,1)=U0 
    rho(:,:)=0 !各阶段密度
    do i=1,Nx,1
        do j=1,Ny,1
            do k=1,Q,1
                call sub_equi(rho(i,j),w(k),e(k,:),u(i,j,:),cs,feq)
                Fn_1(i,j,k)=feq !分布函数初始化为平衡态
            enddo
        enddo

    enddo
    !111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    end

下面是子程序
[Fortran] 纯文本查看 复制代码
subroutine sub_equi(rho,w,e,u,cs,feq)
    !该程序用于求解Maxwell 分布函数
    !rho 密度
    !w 权系数
    !e 离散速度矢量
    !u 格子宏观速度矢量
    !cs 格子声速
    !feq Maxwell 分布函数

    implicit none
    real*8 rho,w,cs,feq,eu,uu
    real*8 e(2),u(2)
    integer i

    eu=e(1)*u(1)+e(2)*u(2) !向量e、u的点乘结果
    uu=u(1)**2+u(2)**2 !向量u、u的向量点乘

    feq=rho*w(1+eu/cs**2+(eu/cs**2)**2/2-uu/(2*cs**2))

    end

在主程序调用子程序的地方出错
错误        1 error #6637: When a dummy argument is a function, the corresponding actual argument must also be a function.   [W]
恳求各位解惑

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

798

帖子

2

主题

0

精华

大宗师

F 币
3793 元
贡献
2268 点
沙发
发表于 2017-5-4 11:44:51 | 只看该作者
子程序中 w 是标量,不是数组或函数。

QQ截图20170504114122.png (22.5 KB, 下载次数: 255)

QQ截图20170504114122.png

1.png (71.75 KB, 下载次数: 252)

1.png

3

帖子

2

主题

0

精华

新人

F 币
23 元
贡献
11 点
板凳
 楼主| 发表于 2017-5-4 21:53:57 | 只看该作者
非常感谢,后面的问题我解决了,再次感谢
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-4-30 09:03

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表