程序無法運(yùn)行怎么回事
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
返回小木蟲查看更多
今日熱帖
京公網(wǎng)安備 11010802022153號(hào)
fortran的東東我都忘了,哈哈,只是樓主寫程序的時(shí)候,風(fēng)格很差,難讀。
可以一步一步自己測試的,不會(huì)用debug工具的話,可以用print 屏幕輸出; 如果,編譯通不過的,那就摸著石頭過河,注釋掉不確定的,從程序頭部開始慢慢往下測。
你這個(gè)程序中有太多的錯(cuò)誤,先根據(jù)編譯器的提示進(jìn)行修改……
舉個(gè)例子:
real:: ne(x,t)
中的 x,t 都不是常數(shù),那么,你的 ne 的定義就是錯(cuò)誤的
ne(0,0)=0.6E-19
默認(rèn)情況下數(shù)組的下標(biāo)是從 1,1 開始的……
ne(x+i*0.02,t+(j+1)*0.01)=
下標(biāo)不能是實(shí)數(shù),只能是整數(shù)……
等等……
ne(x,t)脠莽鹿沒鹵鉚脢戮碌脛脢脟潞爐脢媒鹿脴脧碌脛脴攏驢脪虜戮脥脢脟脣碌ne鹿脴脫脷x,t碌脛潞爐脢媒攏盧賂脙脭玫脙麓露簍脪氓ne?
脛脟脛茫脪陋脨麓脙梅脕陸脮脽脢脟脡露鹿脴脧碌攏盧鹵脠脠莽
ne = a * x + b * t
驢脡脪脭脫脙脪祿賂枚碌樓露脌碌脛潞爐脢媒脌麓脨麓隆顱隆顱
脗茅路魯脛茫擄茂脦脪驢麓驢麓脮芒賂枚魯脤脨貌隆攏 fin.txt 脢盲脠毛路陸魯脤脧碌脢媒
脫婁賂脙脭玫脙麓脢盲脠毛脛脴攏驢脦脪脮芒脩霉脢盲脠毛脭玫脙麓虜?shù)撀睹斆劽様n驢脳脺脢脟脤謾脢戮麓鉚脦貿(mào)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脦陋脭枚鹿茫戮脴脮貿(mào) [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
!脮芒露脦脦陋虜茅脮脪脰梅脭陋脣脴
!脮芒露脦魯脤脨貌碌脛脰梅脪陋脛驢碌脛虜?shù)撁娒嚸幝伱嬞T魯脰碌脳卯麓貿(mào)脭陋脣脴賂酶elmax攏盧露酶脢脟脦陋脕脣脮脪魯枚脳卯麓貿(mào)脭陋脣脴露脭脫婁碌脛鹵錨潞脜
do i=k+1,n
if (dabs(Ab(i,k))>elmax) then
elmax=Ab(i,k)
id_max=i
end if
end do
!脰脕麓脣攏盧脪脩戮顱脥錨魯脡虜茅脮脪脳卯麓貿(mào)脭陋脣脴攏盧虜茅脮脪脥錨魯脡脪脭潞貿(mào)脫毛 碌脷k脨脨陸祿祿祿
!陸祿祿祿脕陸脨脨脭陋脣脴攏盧脝盲脣沒虜?shù)擕u盲
vtemp1=Ab(k,
vtemp2=Ab(id_max,
Ab(k,=vtemp2
Ab(id_max,=vtemp1
!脪脭脡脧脪祿麓貿(mào)露脦脢脟脦陋陸祿祿祿脕陸脨脨脭陋脣脴攏盧陸祿祿祿脥錨魯脡脪脭潞貿(mào)錄麓擄麓脮脮脧沒脭陋路簍陸酶脨脨
do i=k+1,27
temp=Ab(i,k)/Ab(k,k)
Ab(i,=Ab(i,-temp*Ab(k,
end do
end do
!-----------------------------
! 戮顱鹿媒脡脧脪祿虜陸攏盧Ab脪脩戮顱祿爐脦陋脠莽脧脗脨脦脢陸碌脛戮脴脮貿(mào)
! | * * * * # #|
! [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)脧碌脢媒戮脴脮貿(mào)
! 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 : 脧沒脠樓路簍陸芒戮脴脮貿(mào)路陸魯脤
!
!-----------------------------------------------------
! 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
,
看了你的程序,至少找到兩個(gè)錯(cuò)誤。在讀取A(N,N)前沒有定義N的數(shù)值(也沒有定義B(M,N)中的M,子程序subroutine driver(N,M)說明中說從文件讀取,但沒看到相應(yīng)地語句哦。另外可能就是你的fin.txt文件第一行有7個(gè)數(shù)而不是6個(gè)喲。
N碌脛脢媒脰碌脢脟麓脫脦脛錄鎂脰脨露脕脠隆攏盧祿鹿脨貓脪陋露簍脪氓攏驢
脦脛錄鎂脰脨碌脛脢媒戮脻脠莽脧脗攏盧脦陋脢虜脙麓祿鹿脢脟麓鉚脦貿(mào)攏驢
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