程序无法运行怎么回事
program L
implicit none
integer,parameter:: nx=100,nt=100,p=2,te=5,E=2
integer:: i,j
real v
real:: ne(x,t)
real:: n0=5E+2,m=2.1,q=0.6E-19,k=0.514E-9,R=50.0,me=1.2E-3
v=n0*k
x=0.0
t=0.0
do i=1,nx
x=x+i*0.02
do j=1,nt
t=t+j*0.01
ne(0,0)=0.6E-19
ne(x+i*0.02,t+(j+1)*0.01)=-25*te/(me*v)*ne(x+(i+1)*0.02,t+j*0.01)+(1+50*te/(me*v))*ne(x+i*0.02,t+j*0.01)-25*te/(me*v)*ne(x+(i-1)*0.02,t+j*0.01)
open (unit=10,file="1.txt")
write (10,*) ne(x,t)
end do
end do
stop
end
返回小木虫查看更多
今日热帖
京公网安备 11010802022153号
fortran的东东我都忘了,哈哈,只是楼主写程序的时候,风格很差,难读。
可以一步一步自己测试的,不会用debug工具的话,可以用print 屏幕输出; 如果,编译通不过的,那就摸着石头过河,注释掉不确定的,从程序头部开始慢慢往下测。
你这个程序中有太多的错误,先根据编译器的提示进行修改……
举个例子:
real:: ne(x,t)
中的 x,t 都不是常数,那么,你的 ne 的定义就是错误的
ne(0,0)=0.6E-19
默认情况下数组的下标是从 1,1 开始的……
ne(x+i*0.02,t+(j+1)*0.01)=
下标不能是实数,只能是整数……
等等……
ne(x,t)脠莽鹿没卤铆脢戮碌脛脢脟潞炉脢媒鹿脴脧碌脛脴拢驴脪虏戮脥脢脟脣碌ne鹿脴脫脷x,t碌脛潞炉脢媒拢卢赂脙脭玫脙麓露篓脪氓ne?
脛脟脛茫脪陋脨麓脙梅脕陆脮脽脢脟脡露鹿脴脧碌拢卢卤脠脠莽
ne = a * x + b * t
驴脡脪脭脫脙脪禄赂枚碌楼露脌碌脛潞炉脢媒脌麓脨麓隆颅隆颅
脗茅路鲁脛茫掳茂脦脪驴麓驴麓脮芒赂枚鲁脤脨貌隆拢 fin.txt 脢盲脠毛路陆鲁脤脧碌脢媒
脫娄赂脙脭玫脙麓脢盲脠毛脛脴拢驴脦脪脮芒脩霉脢盲脠毛脭玫脙麓虏禄露脭脛脴拢驴脳脺脢脟脤谩脢戮麓铆脦贸A(n,n)
-5 11 -5 -1 0 0 0
0 0 0 -5 11 -5
0 0 0 0 0 0
-5 11 -5 -1 0 0
0 0 0 -5 11 -5
0 0 0 0 0 0
B(n,m)
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
module mat_eq
contains
subroutine solve(A,B,X,N,M)
implicit real*8(a-z)
integer::i,k,N,M
integer::id_max !脰梅脭陋脣脴卤锚潞脜
real*8::A(N,N),B(N,M),X(N,N)
real*8::Aup(N,N),Bup(N,M)
!Ab脦陋脭枚鹿茫戮脴脮贸 [AB]
real*8::AB(N,N+M)
real*8::vtemp1(N+M),vtemp2(N+M)
real*8::vtmp(N),xtmp(N)
AB(1:N,1:N)=A
AB(:,N+1:N+M)=B
! 脮芒露脦脢脟 脕脨脰梅脭陋脧没脠楼路篓碌脛潞脣脨脛虏驴路脰
do k=1,N-1
elmax=dabs(Ab(k,k))
id_max=k
!脮芒露脦脦陋虏茅脮脪脰梅脭陋脣脴
!脮芒露脦鲁脤脨貌碌脛脰梅脪陋脛驴碌脛虏禄脢脟脦陋脕脣赂鲁脰碌脳卯麓贸脭陋脣脴赂酶elmax拢卢露酶脢脟脦陋脕脣脮脪鲁枚脳卯麓贸脭陋脣脴露脭脫娄碌脛卤锚潞脜
do i=k+1,n
if (dabs(Ab(i,k))>elmax) then
elmax=Ab(i,k)
id_max=i
end if
end do
!脰脕麓脣拢卢脪脩戮颅脥锚鲁脡虏茅脮脪脳卯麓贸脭陋脣脴拢卢虏茅脮脪脥锚鲁脡脪脭潞贸脫毛 碌脷k脨脨陆禄禄禄
!陆禄禄禄脕陆脨脨脭陋脣脴拢卢脝盲脣没虏禄卤盲
vtemp1=Ab(k,
vtemp2=Ab(id_max,
Ab(k,=vtemp2
Ab(id_max,=vtemp1
!脪脭脡脧脪禄麓贸露脦脢脟脦陋陆禄禄禄脕陆脨脨脭陋脣脴拢卢陆禄禄禄脥锚鲁脡脪脭潞贸录麓掳麓脮脮脧没脭陋路篓陆酶脨脨
do i=k+1,27
temp=Ab(i,k)/Ab(k,k)
Ab(i,=Ab(i,-temp*Ab(k,
end do
end do
!-----------------------------
! 戮颅鹿媒脡脧脪禄虏陆拢卢Ab脪脩戮颅禄炉脦陋脠莽脧脗脨脦脢陆碌脛戮脴脮贸
! | * * * * # #|
! [A b]= | 0 * * * # #|
! | 0 0 * * # #|
! | 0 0 0 * # #|
!
Aup(:,=AB(1:N,1:N)
do i=1,m
!碌梅脫脙脫脙脡脧脠媒陆脟路陆鲁脤脳茅碌脛禄脴麓酶路陆路篓
vtmp=AB(:,N+i)
call uptri(Aup,vtmp,xtmp,n)
!掳脩录脝脣茫陆谩鹿没赂鲁脰碌赂酶X
X(:,i)=xtmp
end do
end subroutine solve
subroutine uptri(A,b,x,N)
!---------------------------------subroutine comment
! Version : V1.0
! Coded by : syz
! Date : 2010-4-8
!-----------------------------------------------------
! Purpose : 脡脧脠媒陆脟路陆鲁脤脳茅碌脛禄脴麓酶路陆路篓
! Ax=b
!-----------------------------------------------------
! Input parameters :
! 1. A(N,N)脧碌脢媒戮脴脮贸
! 2. b(N)脫脪脧貌脕驴
! 3. N路陆鲁脤脦卢脢媒
! Output parameters :
! 1. x 路陆鲁脤碌脛赂霉
! 2.
! Common parameters :
!
!----------------------------------------------------
implicit real*8(a-z)
integer::i,j,N
real*8::A(N,N),b(N),x(N)
x(N)=b(N)/A(N,N)
!禄脴麓酶虏驴路脰
do i=n-1,1,-1
x(i)=b(i)
do j=i+1,N
x(i)=x(i)-a(i,j)*x(j)
end do
x(i)=x(i)/A(i,i)
end do
end subroutine uptri
subroutine driver(N,M)
!---------------------------------subroutine comment
! Version : V1.0
! Coded by : syz
! Date : 2010-4-8
!-----------------------------------------------------
! Purpose : 脟媒露炉鲁脤脨貌
!-----------------------------------------------------
! Input parameters :
! 1. N 脙猫脢枚 A(N,N)
! 2. M 脙猫脢枚路陆鲁脤 X(N,M)拢卢B(N,M)
! Output parameters :
! 1.
! 2.
! P.S :
! N,M 麓脫脦脛录镁脰脨露脕脠隆
!
!----------------------------------------------------
implicit real*8(a-z)
integer::N,M
integer::i,j
real*8::A(N,N),B(N,M),X(N,M)
read(11,*) A(N,N)
read(11,*) B(N,M)
call solve(A,B,X,N,M)
write(12,*) X(n,m)
end subroutine driver
end module mat_eq
program main
!--------------------------------------program comment
! Version : V1.0
! Coded by : syz
! Date : 2010-4-8
!-----------------------------------------------------
! Purpose : 脧没脠楼路篓陆芒戮脴脮贸路陆鲁脤
!
!-----------------------------------------------------
! In put data files :
! 1. fin.txt 脢盲脠毛路陆鲁脤脧碌脢媒
! 2.
! Output data files :
! 1. fout.txt 录脝脣茫陆谩鹿没
! 2.
!-----------------------------------------------------
! Post Script :
! 1. 脨猫脪陋脳录卤赂脢盲脠毛脢媒戮脻
! 2. 脫脡脫脷脟媒露炉潞炉脢媒碌梅脫脙路陆路篓潞炉脢媒
!-----------------------------------------------------
use mat_eq
integer::N,M
open(unit=11,file='fin.txt')
open(unit=12,file='fout.txt')
call driver(N,M)
end program main
,
看了你的程序,至少找到两个错误。在读取A(N,N)前没有定义N的数值(也没有定义B(M,N)中的M,子程序subroutine driver(N,M)说明中说从文件读取,但没看到相应地语句哦。另外可能就是你的fin.txt文件第一行有7个数而不是6个哟。
N碌脛脢媒脰碌脢脟麓脫脦脛录镁脰脨露脕脠隆拢卢禄鹿脨猫脪陋露篓脪氓拢驴
脦脛录镁脰脨碌脛脢媒戮脻脠莽脧脗拢卢脦陋脢虏脙麓禄鹿脢脟麓铆脦贸拢驴
A(n,n)
-5 11 -5 -1 0 0 0
0 0 0 -5 11 -5
0 0 0 0 0 0
-5 11 -5 -1 0 0
0 0 0 -5 11 -5
0 0 0 0 0 0
B(n,m)
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0