贊助廠商

娛樂城推薦

首頁

刊登資訊

  • 刊登者:匿名
  • 時間:2021-06-03 21:50:08

尚未解答Fortran- 輸出值顯示問號

Fortran- 輸出值顯示問號

小弟最近在學有限元素法
在下面程式中,n<24內都可以正常顯示輸出的值
但一旦n超過24時,輸出的值除了原本給定的邊界值
計算出來的值均會變成???????????
想請問版上的大神們有遇過這種情形嗎?

PROGRAM FEM_HW1
IMPLICIT NONE


real*8,parameter :: min = 0.d0 !Boundary
real*8,parameter :: Max = 1.d0 !Boundary
integer,parameter :: n = 24
integer :: i
real*8 :: h,a,b,dx,x
real*8 :: aa11,aa12,aa22,bb1,bb2
real*8 :: a11,a12,a22,b1,b2
real*8 :: ans
real*8 :: gl(0:n)
real*8 :: BB(0:n),DD(0:n),AA(0:n),CC(0:n) = 0
real*8 :: y(0:n)

aa11(x,b,dx) = x*((b-x)/dx)**2 !Q = x
aa22(x,a,dx) = x*((x-a)/dx)**2 !Q = x
aa12(x,a,b,dx) = x*(a-x)/dx*(x-b)/dx !Q = x
bb1(x,b,dx) = -x*(b-x)/dx !G = -x
bb2(x,a,dx) = -x*(x-a)/dx !G = -x

open(unit = 9,FILE='FEM_HW1.txt')

dx = (Max - min)/dble(n)
do i = 0,n
gl(i) = dble(i)*dx+min
end do

do i = 0,n-1
h = (gl(i+1)-gl(i))/3.d0

call simpson(gl(i),gl(i+1),aa11(gl(i),gl(i+1),dx)
C,aa11(gl(i)+h,gl(i+1),dx),aa11(gl(i)+h*2,gl(i+1),dx)
C,aa11(gl(i)+h*3,gl(i+1),dx),ans)
a11 = 1.d0/dx - ans

call simpson(gl(i),gl(i+1),aa22(gl(i),gl(i),dx)
C,aa22(gl(i)+h,gl(i),dx),aa22(gl(i)+h*2,gl(i),dx)
C,aa22(gl(i)+h*3,gl(i),dx),ans)
a22 = 1.d0/dx - ans

call simpson(gl(i),gl(i+1),aa12(gl(i),gl(i),gl(i+1),dx)
C,aa12(gl(i)+h,gl(i),gl(i+1),dx),aa12(gl(i)+h*2,gl(i),gl(i+1),dx)
C,aa12(gl(i)+h*3,gl(i),gl(i+1),dx),ans)
a12 = -1.d0/dx - ans

call simpson(gl(i),gl(i+1),bb1(gl(i),gl(i+1),dx)
C,bb1(gl(i)+h,gl(i+1),dx),bb1(gl(i)+h*2,gl(i+1),dx)
C,bb1(gl(i)+h*3,gl(i+1),dx),ans)
b1 = -ans

call simpson(gl(i),gl(i+1),bb2(gl(i),gl(i),dx)
C,bb2(gl(i)+h,gl(i),dx),bb2(gl(i)+h*2,gl(i),dx)
C,bb2(gl(i)+h*3,gl(i),dx),ans)
b2 = -ans



BB(i+1) = BB(i+1) + a12
DD( i ) = DD( i ) + a11
AA( i ) = AA( i ) + a12
DD(i+1) = DD(i+1) + a22
CC( i ) = CC( i ) + b1
CC(i+1) = CC(i+1) + b2

end do

BB(0) = 0.d0
DD(0) = 1.d0
AA(0) = 0.d0
CC(0) = 0.d0 !B.C.
BB(n) = 0.d0
DD(n) = 1.d0
AA(n) = 0.d0
CC(n) = 0.d0 !B.C.

CC( 1 ) = CC(1) - BB(1)*CC(0)
BB( 1 ) = 0.d0
CC(n-1) = CC(n-1) - AA(n-1)*CC(n)
AA(n-1) = 0.d0

call SY(1,n-1,BB(1:n-1),DD(1:n-1),AA(1:n-1),CC(1:n-1))
y = CC

do i = 0,n
write(*,'((F12.8))')y(i)
write(9,'((F12.8))')y(i)
end do

close(9)

STOP
END


SUBROUTINE simpson(min,Max,a,b,c,d,I)
IMPLICIT NONE

real*8 :: min,Max,a,b,c,d
real*8 :: I

I = (Max-min)*(a+b*3+c*3+d)/8

RETURN
END


SUBROUTINE SY(IL,IU,BB,DD,AA,CC)
IMPLICIT DOUBLE PRECISION(A-H,O-Z)
DIMENSION AA(1), BB(1), CC(1), DD(1)

LP = IL + 1
DO 10 I = LP, IU
R = BB(I)/DD(I-1)
DD(I) = DD(I) - R*AA(I-1)
10 CC(I) = CC(I) - R*CC(I-1)

CC(IU) = CC(IU)/DD(IU)
DO 20 I = LP,IU
J = IU - I + IL
20 CC(J) = (CC(J)-AA(J)*CC(J+1))/DD(J)


RETURN
END

--

0個答案 Fortran- 輸出值顯示問號

其他問題

友站連結