| 查看: 1059 | 回复: 11 | |||
| 当前主题已经存档。 | |||
panjunxing木虫 (著名写手)
小学生
|
[交流]
【求助】fortran程序,程序贴出来了,望高手帮忙
|
||
|
! ! the pattern in presence partical INTEGER DELT INTEGER idum INTEGER T REAL ran2 REAL G,D,A,F INTEGER DR(40),DL(40),DS(15),DX(15) REAL U(40,40,15), IU(40,40,15) ! PROGRAM ONE DATA DELT, D, G, N1, N2,A, F,HA,WA& /1,0.5,1.2,40,15,0.02,0.4,0.2,0.4/ T=0 IDUM=-1 DO 20 X=1,N1 DO 20 Y=1,N1 DO 20 Z=1,N2 U(X,Y,Z)=0.02*(ran2(idum)-0.5)+0.0 20 CONTINUE ! BOUNDARY CONDITION 25 DO 30 X=1,N1 DO 30 Y=1,N1 DO 30 Z=1,N2 DL(X)=X-1 DR(X)=X+1 DL(Y)=Y-1 DR(Y)=Y+1 DS(Z)=Z+1 DX(Z)=Z-1 30 CONTINUE DL(1)=N1 ! MAIN PROGRAM 35 DO 80 X=1,N1 DO 80 Y=1,N1 DO 80 Z=1,N2 IU(X,Y,Z)=D*((6*(U(DR(X),Y,Z)+U(DL(X),Y,Z)& +U(X,DR(Y),Z)+U(X,DL(Y),Z)& +U(X,Y,DS(Z))+U(X,Y,DX(Z)))& +3*(U(DR(X),DR(Y),Z)+U(DR(X),DL(Y),Z)& +U(DL(X),DR(Y),Z)+U(DL(X),DL(Y),Z)& +U(DR(X),Y,DS(Z))+U(DR(X),Y,DX(Z))& +U(DL(X),Y,DS(Z))+U(DL(X),Y,DX(Z))& +U(X,DR(Y),DS(Z))+U(X,DR(Y),DX(Z))& +U(X,DL(Y),DS(Z))+U(X,DL(Y),DX(Z)))& +(U(DR(X),DR(Y),DS(Z))+U(DR(X),DR(Y),DX(Z))& +U(DL(X),DL(Y),DX(Z))+U(DL(X),DL(Y),DS(Z))& +U(DR(X),DL(Y),DS(Z))+U(DL(X),DR(Y),DS(Z))& +U(DL(X),DR(Y),DX(Z))+U(DR(X),DL(Y),DX(Z))))/80& -U(X,Y,Z))+G*TANH(U(X,Y,Z))-S*ALOG(G) 80 CONTINUE DO 85 Z=1,N2 S=HA*WA*DE IF(Z==1)THEN DE=1 ELSEIF(Z>1.AND.Z ELSEIF(Z==N2)THEN DE=1 END IF 85 CONTINUE 90 DO 100 X=1,N1 DO 100 Y=1,N1 DO 100 Z=1,N2 U(X,Y,Z)=IU(X,Y,Z)& -(6*(IU(DR(X),Y,Z)+IU(DL(X),Y,Z)& +IU(X,DR(Y),Z)+IU(X,DL(Y),Z)& +IU(X,Y,DS(Z))+IU(X,Y,DX(Z)))& +3*(IU(DR(X),DR(Y),Z)+IU(DR(X),DL(Y),Z)& +IU(DL(X),DR(Y),Z)+IU(DL(X),DL(Y),Z)& +IU(DR(X),Y,DS(Z))+IU(DR(X),Y,DX(Z))& +IU(DL(X),Y,DS(Z))+IU(DL(X),Y,DX(Z))& +IU(X,DR(Y),DS(Z))+IU(X,DR(Y),DX(Z))& +IU(X,DL(Y),DS(Z))+IU(X,DL(Y),DX(Z)))& +(IU(DR(X),DR(Y),DS(Z))+IU(DR(X),DR(Y),DX(Z))& +IU(DL(X),DL(Y),DX(Z))+IU(DL(X),DL(Y),DS(Z))& +IU(DR(X),DL(Y),DS(Z))+IU(DL(X),DR(Y),DS(Z))& +IU(DL(X),DR(Y),DX(Z))+IU(DR(X),DL(Y),DX(Z))))/80& +(6*(U(DR(X),Y,Z)+U(DL(X),Y,Z)& +U(X,DR(Y),Z)+U(X,DL(Y),Z)& +U(X,Y,DS(Z))+U(X,Y,DX(Z)))& +3*(U(DR(X),DR(Y),Z)+U(DR(X),DL(Y),Z)& +U(DL(X),DR(Y),Z)+U(DL(X),DL(Y),Z)& +U(DR(X),Y,DS(Z))+U(DR(X),Y,DX(Z))& +U(DL(X),Y,DS(Z))+U(DL(X),Y,DX(Z))& +U(X,DR(Y),DS(Z))+U(X,DR(Y),DX(Z))& +U(X,DL(Y),DS(Z))+U(X,DL(Y),DX(Z)))& +(U(DR(X),DR(Y),DS(Z))+U(DR(X),DR(Y),DX(Z))& +U(DL(X),DL(Y),DX(Z))+U(DL(X),DL(Y),DS(Z))& +U(DR(X),DL(Y),DS(Z))+U(DL(X),DR(Y),DS(Z))& +U(DL(X),DR(Y),DX(Z))+U(DR(X),DL(Y),DX(Z))))/80& -A*(U(X,Y,Z)-1+2*F) 100 CONTINUE T=T+DELT IF(T.EQ.50) THEN OPEN(1,FILE='X1.DAT') DO 130 X=1,N1 DO 130 Y=1,N1 DO 130 Z=1,N2 IF(U(X,Y,Z).GT.0.05) THEN WRITE(1,*) X,Y,Z END IF 130 CONTINUE CLOSE(1) write (*,*) 'T=', T END IF IF(T.EQ.100) THEN OPEN(2,FILE='X2.DAT') DO 140 X=1,N1 DO 140 Y=1,N1 DO 140 Z=1,N2 IF(U(X,Y,Z).GT.0.05) THEN WRITE(2,*) X,Y,Z END IF 140 CONTINUE CLOSE(2) write (*,*) 'T=', T END IF IF(T.EQ.500) THEN OPEN(3,FILE='X3.DAT') DO 150 X=1,N1 DO 150 Y=1,N1 DO 150 Z=1,N2 IF (U(X,Y,Z).GT.0.05) THEN WRITE(3,*) X,Y,Z END IF 150 CONTINUE CLOSE(3) write (*,*) 'T=', T END IF IF(T.EQ.1000) THEN OPEN(4,FILE='X4.DAT') DO 160 X=1,N1 DO 160 Y=1,N1 DO 160 Z=1,N2 IF(U(X,Y,Z).GT.0.05) THEN WRITE(4,*) X,Y,Z END IF 160 CONTINUE CLOSE(4) write (*,*) 'T=', T END IF IF(T.EQ.2000) THEN OPEN(5,FILE='X5.DAT') DO 170 X=1,N1 DO 170 Y=1,N1 DO 170 Z=1,N2 IF(U(X,Y,Z).GT.0.05) THEN WRITE(5,*) X,Y,Z END IF 170 CONTINUE CLOSE(5) write (*,*) 'T=', T END IF IF(T.EQ.5000) THEN OPEN(6,FILE='X6.DAT') DO 180 X=1,N1 DO 180 Y=1,N1 DO 180 Z=1,N2 IF(U(X,Y,Z).GT.0.05) THEN WRITE(6,*) X,Y,Z END IF 180 CONTINUE CLOSE(6) write (*,*) 'T=', T END IF IF(T.EQ.10000) THEN OPEN(7,FILE='X7.DAT') DO 190 X=1,N1 DO 190 Y=1,N1 DO 190 Z=1,N2 IF(U(X,Y,Z).GT.0.05) THEN WRITE(7,*) X,Y,Z END IF 190 CONTINUE CLOSE(7) write (*,*) 'T=', T END IF IF(T.EQ.20000) THEN OPEN(8,FILE='X8.DAT') DO 200 X=1,N1 DO 200 Y=1,N1 DO 200 Z=1,N2 IF(U(X,Y,Z).GT.0.05) THEN WRITE(8,*) X,Y,Z END IF 200 CONTINUE CLOSE(8) write (*,*) 'T=', T END IF IF(T.GT.20000)THEN STOP END IF GOTO 35 END ! RANDOM NUMBER FUNCTION ran2(idum) INTEGER idum,IM1,IM2,IMM1,IA1,IA2,IQ1,IQ2,IR1,IR2,NTAB,NDIV REAL ran2,AM,EPS,RNMX PARAMETER (IM1=2147483563,IM2=2147483399,AM=1./IM1,IMM1=IM1-1,& IA1=40014,IA2=40692,IQ1=53668,IQ2=52774,IR1=12211,IR2=3791,& NTAB=32,NDIV=1+IMM1/NTAB,EPS=1.2e-7,RNMX=1.-EPS) INTEGER idum2,j,k,iv(NTAB),iy SAVE iv,iy,idum2 DATA idum2/123456789/, iv/NTAB*0/, iy/0/ if (idum.le.0) then idum=max(-idum,1) idum2=idum do 11 j=NTAB+8,1,-1 k=idum/IQ1 idum=IA1*(idum-k*IQ1)-k*IR1 if (idum.lt.0) idum=idum+IM1 if (j.le.NTAB) iv(j)=idum 11 continue iy=iv(1) endif k=idum/IQ1 idum=IA1*(idum-k*IQ1)-k*IR1 if (idum.lt.0) idum=idum+IM1 k=idum2/IQ2 idum2=IA2*(idum2-k*IQ2)-k*IR2 if (idum2.lt.0) idum2=idum2+IM2 j=1+iy/NDIV iy=iv(j)-idum2 iv(j)=idum if(iy.lt.1)iy=iy+IMM1 ran2=min(AM*iy,RNMX) return END |
» 猜你喜欢
有没有人能给点建议
已经有5人回复
假如你的研究生提出不合理要求
已经有12人回复
实验室接单子
已经有7人回复
全日制(定向)博士
已经有5人回复
萌生出自己或许不适合搞科研的想法,现在跑or等等看?
已经有4人回复
Materials Today Chemistry审稿周期
已经有4人回复
参与限项
已经有3人回复
对氯苯硼酸纯化
已经有3人回复
所感
已经有4人回复
要不要辞职读博?
已经有7人回复

sandycug
金虫 (小有名气)
- 应助: 0 (幼儿园)
- 金币: 1031.8
- 帖子: 181
- 在线: 54.6小时
- 虫号: 236311
- 注册: 2006-04-02
- 专业: 凝聚态物性 II :电子结构
2楼2008-09-19 14:27:11
panjunxing
木虫 (著名写手)
小学生
- 应助: 0 (幼儿园)
- 金币: 2994.8
- 散金: 948
- 红花: 2
- 帖子: 1103
- 在线: 69.8小时
- 虫号: 579223
- 注册: 2008-07-04
- 性别: MM
- 专业: 高分子组装与超分子结构

3楼2008-09-22 09:22:06
grant.tgb
木虫 (小有名气)
- 应助: 1 (幼儿园)
- 金币: 2734.1
- 帖子: 170
- 在线: 41.1小时
- 虫号: 425534
- 注册: 2007-07-27
- 性别: GG
- 专业: 金属材料的力学行为
数组定义有问题
★ ★ ★
灯塔守望者(金币+3,VIP+0):谢谢支持小木虫
灯塔守望者(金币+3,VIP+0):谢谢支持小木虫
|
问题出在这里: INTEGER DR(40),DL(40),DS(15),DX(15) REAL U(40,40,15), IU(40,40,15) 而下面有: DX(0)=1 DS(N2+1)=N2 ...... 类似这两种不对应的情况造成了"数组溢出"(其实是你用了超出定义范围的数组)。 解决办法: 1.对于DX(0),可在前面定义时采用 类似DX(0:15)形式(下面的一样 U(0:40,0:40,0:15), IU(0:40,0:40,0:15)) 2.对于N2+1=16>15这样的情况,就更加简单了。 3.按这个思路继续检查... |
4楼2008-10-08 08:47:26
grant.tgb
木虫 (小有名气)
- 应助: 1 (幼儿园)
- 金币: 2734.1
- 帖子: 170
- 在线: 41.1小时
- 虫号: 425534
- 注册: 2007-07-27
- 性别: GG
- 专业: 金属材料的力学行为
5楼2008-10-08 09:01:05
grant.tgb
木虫 (小有名气)
- 应助: 1 (幼儿园)
- 金币: 2734.1
- 帖子: 170
- 在线: 41.1小时
- 虫号: 425534
- 注册: 2007-07-27
- 性别: GG
- 专业: 金属材料的力学行为
至少能运行了
★
sunxiao(金币+1):谢谢参与,迟到的奖励,呵呵 1-22 03:50
sunxiao(金币+1):谢谢参与,迟到的奖励,呵呵 1-22 03:50
|
! ! the pattern in presence partical INTEGER DELT INTEGER idum INTEGER T REAL ran2 REAL G,D,A,F INTEGER DR(0:40),DL(0:40),DS(0:16),DX(0:16) REAL U(0:40,0:40,0:16), IU(0:40,0:40,0:16) ! PROGRAM ONE DATA DELT, D, G, N1, N2,A, F,HA,WA /1,0.5,1.2,40,15,0.02,0.4,0.2,0.4/ T=0 IDUM=-1 DO 20 ii=1,N1 DO 20 jj=1,N1 DO 20 kk=1,N2 U(ii,jj,kk)=0.02*(ran2(idum)-0.5)+0.0 20 CONTINUE ! BOUNDARY CONDITION 25 DO 30 ii=1,N1 DO 30 jj=1,N1 DO 30 kk=1,N2 DL(ii)=ii-1 DR(ii)=ii+1 DL(jj)=jj-1 DR(jj)=jj+1 DS(kk)=kk+1 DX(kk)=kk-1 30 CONTINUE do ii=1,N1 do jj=1,N1 DL(1)=N1 DR(N1)=1 DX(0)=1 DS(N2+1)=N2 U(ii,jj,1-1)=U(ii,jj,1) U(ii,jj,N2+1)=U(ii,jj,N2) IU(ii,jj,1-1)=IU(ii,jj,1) IU(ii,jj,N2+1)=IU(ii,jj,N2) end do end do ! MAIN PROGRAM 35 DO 80 ii=1,N1 DO 80 jj=1,N1 DO 80 kk=1,N2 ! pause IU(ii,jj,kk)=D*((6*(U(DR(ii),jj,kk)+U(DL(ii),jj,kk) +U(ii,DR(jj),kk)+U(ii,DL(jj),kk) +U(ii,jj,DS(kk))+U(ii,jj,DX(kk))) +3*(U(DR(ii),DR(jj),kk)+U(DR(ii),DL(jj),kk) +U(DL(ii),DR(jj),kk)+U(DL(ii),DL(jj),kk) +U(DR(ii),jj,DS(kk))+U(DR(ii),jj,DX(kk)) +U(DL(ii),jj,DS(kk))+U(DL(ii),jj,DX(kk)) +U(ii,DR(jj),DS(kk))+U(ii,DR(jj),DX(kk)) +U(ii,DL(jj),DS(kk))+U(ii,DL(jj),DX(kk))) +(U(DR(ii),DR(jj),DS(kk))+U(DR(ii),DR(jj),DX(kk)) +U(DL(ii),DL(jj),DX(kk))+U(DL(ii),DL(jj),DS(kk)) +U(DR(ii),DL(jj),DS(kk))+U(DL(ii),DR(jj),DS(kk)) +U(DL(ii),DR(jj),DX(kk))+U(DR(ii),DL(jj),DX(kk))))/80 -U(ii,jj,kk))+G*TANH(U(ii,jj,kk))-S*ALOG(G) 80 CONTINUE DO 85 kk=1,N2 S=HA*WA*DE IF(kk==1)THEN DE=1 ELSEIF(kk>1.AND.kk ELSEIF(kk==N2)THEN DE=1 END IF 85 CONTINUE 90 DO 100 ii=1,N1 DO 100 jj=1,N1 DO 100 kk=1,N2 U(ii,jj,kk)=IU(ii,jj,kk) -(6*(IU(DR(ii),jj,kk)+IU(DL(ii),jj,kk) +IU(ii,DR(jj),kk)+IU(ii,DL(jj),kk) +IU(ii,jj,DS(kk))+IU(ii,jj,DX(kk))) +3*(IU(DR(ii),DR(jj),kk)+IU(DR(ii),DL(jj),kk) +IU(DL(ii),DR(jj),kk)+IU(DL(ii),DL(jj),kk) +IU(DR(ii),jj,DS(kk))+IU(DR(ii),jj,DX(kk)) +IU(DL(ii),jj,DS(kk))+IU(DL(ii),jj,DX(kk)) +IU(ii,DR(jj),DS(kk))+IU(ii,DR(jj),DX(kk)) +IU(ii,DL(jj),DS(kk))+IU(ii,DL(jj),DX(kk))) +(IU(DR(ii),DR(jj),DS(kk))+IU(DR(ii),DR(jj),DX(kk)) +IU(DL(ii),DL(jj),DX(kk))+IU(DL(ii),DL(jj),DS(kk)) +IU(DR(ii),DL(jj),DS(kk))+IU(DL(ii),DR(jj),DS(kk)) +IU(DL(ii),DR(jj),DX(kk))+IU(DR(ii),DL(jj),DX(kk))))/80 +(6*(U(DR(ii),jj,kk)+U(DL(ii),jj,kk) +U(ii,DR(jj),kk)+U(ii,DL(jj),kk) +U(ii,jj,DS(kk))+U(ii,jj,DX(kk))) +3*(U(DR(ii),DR(jj),kk)+U(DR(ii),DL(jj),kk) +U(DL(ii),DR(jj),kk)+U(DL(ii),DL(jj),kk) +U(DR(ii),jj,DS(kk))+U(DR(ii),jj,DX(kk)) +U(DL(ii),jj,DS(kk))+U(DL(ii),jj,DX(kk)) +U(ii,DR(jj),DS(kk))+U(ii,DR(jj),DX(kk)) +U(ii,DL(jj),DS(kk))+U(ii,DL(jj),DX(kk))) +(U(DR(ii),DR(jj),DS(kk))+U(DR(ii),DR(jj),DX(kk)) +U(DL(ii),DL(jj),DX(kk))+U(DL(ii),DL(jj),DS(kk)) +U(DR(ii),DL(jj),DS(kk))+U(DL(ii),DR(jj),DS(kk)) +U(DL(ii),DR(jj),DX(kk))+U(DR(ii),DL(jj),DX(kk))))/80 -A*(U(ii,jj,kk)-1+2*F) 100 CONTINUE T=T+DELT IF(T.EQ.50) THEN OPEN(1,FILE='X1.DAT') DO 130 ii=1,N1 DO 130 jj=1,N1 DO 130 kk=1,N2 IF(U(ii,jj,kk).GT.0.05) THEN WRITE(1,*) ii,jj,kk END IF 130 CONTINUE CLOSE(1) write (*,*) 'T=', T END IF IF(T.EQ.100) THEN OPEN(2,FILE='X2.DAT') DO 140 ii=1,N1 DO 140 jj=1,N1 DO 140 kk=1,N2 IF(U(ii,jj,kk).GT.0.05) THEN WRITE(2,*) ii,jj,kk END IF 140 CONTINUE CLOSE(2) write (*,*) 'T=', T END IF IF(T.EQ.500) THEN OPEN(3,FILE='X3.DAT') DO 150 ii=1,N1 DO 150 jj=1,N1 DO 150 kk=1,N2 IF (U(ii,jj,kk).GT.0.05) THEN WRITE(3,*) ii,jj,kk END IF 150 CONTINUE CLOSE(3) write (*,*) 'T=', T END IF IF(T.EQ.1000) THEN OPEN(4,FILE='X4.DAT') DO 160 ii=1,N1 DO 160 jj=1,N1 DO 160 kk=1,N2 IF(U(ii,jj,kk).GT.0.05) THEN WRITE(4,*) ii,jj,kk END IF 160 CONTINUE CLOSE(4) write (*,*) 'T=', T END IF IF(T.EQ.2000) THEN OPEN(5,FILE='X5.DAT') DO 170 ii=1,N1 DO 170 jj=1,N1 DO 170 kk=1,N2 IF(U(ii,jj,kk).GT.0.05) THEN WRITE(5,*) ii,jj,kk END IF 170 CONTINUE CLOSE(5) write (*,*) 'T=', T END IF IF(T.EQ.5000) THEN OPEN(6,FILE='X6.DAT') DO 180 ii=1,N1 DO 180 jj=1,N1 DO 180 kk=1,N2 IF(U(ii,jj,kk).GT.0.05) THEN WRITE(6,*) ii,jj,kk END IF 180 CONTINUE CLOSE(6) write (*,*) 'T=', T END IF IF(T.EQ.10000) THEN OPEN(7,FILE='X7.DAT') DO 190 ii=1,N1 DO 190 jj=1,N1 DO 190 kk=1,N2 IF(U(ii,jj,kk).GT.0.05) THEN WRITE(7,*) ii,jj,kk END IF 190 CONTINUE CLOSE(7) write (*,*) 'T=', T END IF IF(T.EQ.20000) THEN OPEN(8,FILE='X8.DAT') DO 200 ii=1,N1 DO 200 jj=1,N1 DO 200 kk=1,N2 IF(U(ii,jj,kk).GT.0.05) THEN WRITE(8,*) ii,jj,kk END IF 200 CONTINUE CLOSE(8) write (*,*) 'T=', T END IF IF(T.GT.20000)THEN STOP END IF GOTO 35 END ! RANDOM NUMBER FUNCTION ran2(idum) INTEGER idum,IM1,IM2,IMM1,IA1,IA2,IQ1,IQ2,IR1,IR2,NTAB,NDIV REAL ran2,AM,EPS,RNMX PARAMETER (IM1=2147483563,IM2=2147483399,AM=1./IM1,IMM1=IM1-1, IA1=40014,IA2=40692,IQ1=53668,IQ2=52774,IR1=12211,IR2=3791, NTAB=32,NDIV=1+IMM1/NTAB,EPS=1.2e-7,RNMX=1.-EPS) INTEGER idum2,j,k,iv(NTAB),iy SAVE iv,iy,idum2 DATA idum2/123456789/, iv/NTAB*0/, iy/0/ if (idum.le.0) then idum=max(-idum,1) idum2=idum do 11 j=NTAB+8,1,-1 k=idum/IQ1 idum=IA1*(idum-k*IQ1)-k*IR1 if (idum.lt.0) idum=idum+IM1 if (j.le.NTAB) iv(j)=idum 11 continue iy=iv(1) endif k=idum/IQ1 idum=IA1*(idum-k*IQ1)-k*IR1 if (idum.lt.0) idum=idum+IM1 k=idum2/IQ2 idum2=IA2*(idum2-k*IQ2)-k*IR2 if (idum2.lt.0) idum2=idum2+IM2 j=1+iy/NDIV iy=iv(j)-idum2 iv(j)=idum if(iy.lt.1)iy=iy+IMM1 ran2=min(AM*iy,RNMX) return END |
6楼2008-10-08 09:11:17
grant.tgb
木虫 (小有名气)
- 应助: 1 (幼儿园)
- 金币: 2734.1
- 帖子: 170
- 在线: 41.1小时
- 虫号: 425534
- 注册: 2007-07-27
- 性别: GG
- 专业: 金属材料的力学行为
7楼2008-10-08 09:14:53
8楼2008-10-08 10:18:21
anxt2006
木虫 (正式写手)
- 应助: 0 (幼儿园)
- 金币: 6086.7
- 散金: 38
- 红花: 1
- 帖子: 377
- 在线: 208.2小时
- 虫号: 578555
- 注册: 2008-07-04
- 专业: 凝聚态物性 II :电子结构
9楼2008-10-10 18:41:09
panjunxing
木虫 (著名写手)
小学生
- 应助: 0 (幼儿园)
- 金币: 2994.8
- 散金: 948
- 红花: 2
- 帖子: 1103
- 在线: 69.8小时
- 虫号: 579223
- 注册: 2008-07-04
- 性别: MM
- 专业: 高分子组装与超分子结构

10楼2008-10-20 18:42:14












回复此楼