|
求各位帮我看看,这问题卡我两三个小时了。下面是我的主程序
[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]
恳求各位解惑
|
|