| 6 | 1/1 | 返回列表 |
| 查看: 1010 | 回復: 5 | |||
曾經(jīng)電工金蟲 (小有名氣)
|
[交流]
【求助】FORTRAN中增加計算區(qū)域后出錯, 已有2人參與
|
| 開始我計算點為50×100,程序能夠正常編譯和運行,結(jié)果也還是可以。但是當計算點增加到500×100時,可以運行,而出來的結(jié)果完全不正確。看了一下數(shù)據(jù),發(fā)現(xiàn)是在計算濃度場中,增加計算點后其計算值出現(xiàn)負數(shù)。不知怎么回事?另外還有一個問題就是計算過程中本來值為1.000000000000000,但是顯示結(jié)果卻為1.00000000000001,再繼續(xù)運行下去的話,會出現(xiàn)累計現(xiàn)象,從而影響結(jié)果的正確性。參數(shù)的精度我都定義為雙精度的,這是怎么一個情況? |
至尊木蟲 (職業(yè)作家)
金蟲 (小有名氣)
|
謝謝您的回答,我的濃度計算程序如下,麻煩您幫我看一下是否是程序中的問題呢?我認為這種浮點計算的誤差是在積累,最后都影響到結(jié)果的正確性了。 module const implicit none integer,parameter :: N=100 integer,parameter :: L=50 integer,parameter :: tmax=900000 double precision,parameter :: Dis=2.0d-3 double precision,parameter :: dx=4.0d-6 double precision,parameter :: Ds=1.68d-9 double precision,parameter :: Cs0=10.8d0 double precision,parameter :: Cxm=20.0d0 double precision,parameter :: Yxs=0.61d0 double precision,parameter :: Ks=5.204d0 double precision,parameter :: dts=1.0d0 end module const !===================================== ! 主程序 !===================================== program main use const implicit none integer :: it,x,z,ci(1:N,1:L) double precision :: Sd(1:N,1:L),Cd(1:N,1:L) call init_Field(Sd,Cd,ci) do it=1,tmax call substrate(Sd,Cd,ci) end do stop end subroutine init_Field(Sd,Cd,ci) use const implicit none double precision :: a,Sd(1:N,1:L),Cd(1:N,1:L) integer :: ci(1:N,1:L) integer :: x,z do x=1,N do z=1,L ci(x,z)=0 Sd(x,z)=1.0d0 Cd(x,z)=0.0d0 end do end do call random_seed() do x=1,N z=1 call random_number(a) Cd(x,z)=a if (Cd(x,z)<=0.5d0) then ci(x,z)=1 else Cd(x,z)=0.0d0 end if end do return end !========================================================================================= ! 濃度場迭代計算: 在每個坐標方向上分別采用追趕法進行求解三對角方程組, ! 其他方向則按照顯示處理的交替方向隱式方法ADI(alternating direction implicit) !========================================================================================= subroutine substrate(Sd,Cd,ci) use const implicit none integer :: x,z,ci(1:N,1:L),Zm,Zb,k(1:L) double precision :: Sd(1:N,1:L),Cd(1:N,1:L),Ud(1:N,1:L),Md(1:N,1:L),a1(1:N,1:L),a2(1:N,1:L),a3(1:N,1:L),aa1(1:N,1:L),aa2(1:N,1:L),aa3(1:N,1:L) ! a1,a2,a3,b1為三對角陣方程系數(shù)(x方向);ps為底物消耗量 double precision :: ps2(1:N,1:L),f(1:N,1:L),fe(1:N,1:L),y(1:N,1:L),m(1:N,1:L),me(1:N,1:L),r(1:N,1:L),tt,kk,I,b1(1:N,1:L),b2(1:N,1:L),ps1(1:N,1:L) double precision :: um,ms ms=0.562137d0 um=0.25986d0 Zm=0 k(1:L)=0 do z=1,L do x=1,N k(z)=k(z)+ci(x,z) end do if (k(z)==0) then Zm=z-1 goto 300 else continue end if end do 300 Zb=Zm+10 do x=1,N do z=Zb+1,L Sd(x,z)=1.0d0 end do end do do x=1,N do z=1,L Ud(x,z)=Sd(x,z) end do end do !!! X-direction tt=um kk=ms a1(1:N,1:Zb)=-1.0d0 a3(1:N,1:Zb)=-1.0d0 a2(1:N,1:Zb)=2.0d0+(2.0d0*(Dis**2)*(dx**2))/(dts*Ds) do z=2,Zb do x=2,N-1 b1(x,z)=Sd(x,z+1)+((2.0d0*(Dis**2)*(dx**2))/(dts*Ds)-2.0d0)*Sd(x,z)+Sd(x,z-1)-ps1(x,z) ps1(x,z)=((Dis**2)*(dx**2)/Ds)*((tt*Cxm*Cd(x,z)*Sd(x,z))/(Yxs*Cs0*(Ks/Cs0+Sd(x,z)))+Cxm*Cd(x,z)*kk/Cs0) end do end do do z=2,Zb f(2,z)=a3(2,z)/a2(2,z) fe(2,z)=a2(2,z) do x=3,N-2 fe(x,z)=a2(x,z)-(a1(x,z)*f(x-1,z)) f(x,z)=a3(x,z)/fe(x,z) end do fe(N-1,z)=a2(N-1,z)-(a1(N-1,z)*f(N-2,z)) !---------------------------------------------------------- y(2,z)=(b1(2,z)-a1(2,z)*Sd(1,z))/a2(2,z) do x=3,N-2 y(x,z)=(b1(x,z)-a1(x,z)*y(x-1,z))/fe(x,z) end do y(N-1,z)=(b1(N-1,z)-a3(N-1,z)*Sd(N,z)-a1(N-1,z)*y(N-2,z))/fe(N-1,z) !---------------------------------------------------------- Ud(N-1,z)=y(N-1,z) do x=N-2,2,-1 Ud(x,z)=y(x,z)-f(x,z)*Ud(x+1,z) end do !----------------------------------------------------------- Ud(N,z)=(4.0d0*Ud(2,z)+4.0d0*Ud(N-1,z)-Ud(N-2,z)-Ud(3,z))/6.0d0 Ud(1,z)=Ud(N,z) end do do x=1,N Ud(x,1)=(4.0d0*Ud(x,2)-Ud(x,3))/3.0d0 Ud(1,1)=Ud(N,1) end do do x=1,N do z=1,L Md(x,z)=Ud(x,z) end do end do !!! Z-direction aa1(1:N,1:Zb)=-1.0d0 aa3(1:N,1:Zb)=-1.0d0 aa2(1:N,1:Zb)=2.0d0+(2.0d0*(Dis**2)*(dx**2))/(dts*Ds) do x=2,N-1 do z=2,Zb b2(x,z)=Md(x+1,z)+((2.0d0*(Dis**2)*(dx**2))/(dts*Ds)-2.0d0)*Md(x,z)+Md(x-1,z)-ps2(x,z) ps2(x,z)=((Dis**2)*(dx**2)/Ds)*((tt*Cxm*Cd(x,z)*Md(x,z))/(Yxs*Cs0*(Ks/Cs0+Md(x,z)))+Cxm*Cd(x,z)*kk/Cs0) end do end do do x=2,N-1 m(x,2)=aa3(x,2)/aa2(x,2) me(x,2)=aa2(x,2) do z=3,Zb-1 me(x,z)=aa2(x,z)-(aa1(x,z)*m(x,z-1)) m(x,z)=aa3(x,z)/me(x,z) end do me(x,Zb)=aa2(x,Zb)-(aa1(x,Zb)*m(x,Zb-1)) !------------------------------------------------------------------------------------ r(x,2)=(b2(x,2)-aa1(x,2)*Md(x,1))/aa2(x,2) do z=3,Zb-1 r(x,z)=(b2(x,z)-aa1(x,z)*r(x,z-1))/me(x,z) end do r(x,Zb)=(b2(x,Zb)-aa3(x,Zb)*Md(x,Zb+1)-aa1(x,Zb)*r(x,Zb-1))/me(x,Zb) !----------------------------------------------------------------------------------- Sd(x,Zb)=r(x,Zb) do z=Zb-1,2,-1 sd(x,z)=r(x,z)-m(x,z)*Sd(x,z+1) end do !----------------------------------------------------------------------------------- Sd(x,1)=(4.0d0*Sd(x,2)-Sd(x,3))/3.0d0 end do do z=1,Zb Sd(N,z)=(4.0d0*Sd(N-1,z)+4.0d0*Sd(2,z)-Sd(3,z)-Sd(N-2,z))/6.0d0 Sd(1,z)=Sd(N,z) end do return end [ Last edited by 曾經(jīng)電工 on 2010-9-14 at 16:13 ] |
至尊木蟲 (職業(yè)作家)
金蟲 (小有名氣)

| 6 | 1/1 | 返回列表 |
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 材料調(diào)劑 +3 | 匹克i 2026-03-23 | 3/150 |
|
|---|---|---|---|---|
|
[考研] 材料專碩英一數(shù)二306 +8 | z1z2z3879 2026-03-18 | 8/400 |
|
|
[考研] 303求調(diào)劑 +4 | 元夕元 2026-03-20 | 4/200 |
|
|
[考研] 一志愿上海交大生物與醫(yī)藥專碩324分,求調(diào)劑 +5 | jiajunX 2026-03-22 | 5/250 |
|
|
[考研] 求調(diào)劑一志愿武漢理工大學材料工程(085601) +3 | WW.' 2026-03-23 | 5/250 |
|
|
[考研] 08工學調(diào)劑 +7 | 用戶573181 2026-03-20 | 11/550 |
|
|
[考研] 0854電子信息求調(diào)劑 324 +3 | Promise-jyl 2026-03-23 | 3/150 |
|
|
[考研] 工科材料085601 279求調(diào)劑 +8 | 困于星晨 2026-03-17 | 10/500 |
|
|
[考研] 070300,一志愿北航320求調(diào)劑 +3 | Jerry0216 2026-03-22 | 5/250 |
|
|
[考研] 一志愿西安交通大學材料工程專業(yè) 282分求調(diào)劑 +11 | 楓橋ZL 2026-03-18 | 13/650 |
|
|
[考研] 289求調(diào)劑 +7 | 懷瑾握瑜l 2026-03-20 | 7/350 |
|
|
[考研] 275求調(diào)劑 +6 | shansx 2026-03-22 | 8/400 |
|
|
[考研] 260求調(diào)劑 +3 | 朱芷琳 2026-03-20 | 4/200 |
|
|
[考研] 318求調(diào)劑 +4 | plum李子 2026-03-21 | 7/350 |
|
|
[考研] 初試 317 +7 | 半拉月丙 2026-03-20 | 7/350 |
|
|
[考研] 296求調(diào)劑 +4 | www_q 2026-03-20 | 4/200 |
|
|
[考研] 265求調(diào)劑 +12 | 梁梁校校 2026-03-19 | 14/700 |
|
|
[考研] 295求調(diào)劑 +4 | 一志愿京區(qū)211 2026-03-18 | 6/300 |
|
|
[考研] 261求B區(qū)調(diào)劑,科研經(jīng)歷豐富 +3 | 牛奶很忙 2026-03-20 | 4/200 |
|
|
[考研] 288求調(diào)劑,一志愿華南理工大學071005 +5 | ioodiiij 2026-03-17 | 5/250 |
|