找回密码
 注册
Simdroid-非首页
查看: 108|回复: 0

[3. Fortran] 请大虾帮我看看这段程序!

[复制链接]
发表于 2004-11-15 10:16:49 | 显示全部楼层 |阅读模式 来自 清华大学
  1. subroutine sdcdx(f,x,N,dfdx,fx,ndord,iv,m)
  2.     implicit real*8 (a-h,o-z)
  3.     dimension x(N),y(3),fx(27),dfdx( * )
  4.     external f
  5.     h =0.02
  6.     h2 = h*2
  7. c     write(*,*) 'h =',h,'   x =',x
  8.     m = 0
  9. c     do 300 i=-1,1
  10. c     y(3) = x(3)+h*i
  11.     do 200 j=-1,1
  12.     y(2) = x(2)+h*j
  13.     do 100 k=-1,1
  14.     y(1) = x(1)+h*k
  15.     m = m+1
  16. [b]  [color=red]if (( n .eq.1) .and. (i * j.ne.0)) goto 100
  17.     if (( n .eq.2) .and. (i.ne.0)) goto 100
  18.     if (ndord.eq.1) then
  19.     kk = k*k+j*j+i*i
  20.     if (kk.gt.1) goto 100
  21.     endif[/color][/b]    fx( m ) = f(y,iv)
  22. c     write( * ,'(1x,i3,4f10.4)') m,y,fx( m )
  23. 100   continue
  24. 200   continue
  25. c300   continue
  26. 400   continue
  27. c     write( * , * ) 'iv,n,m =',iv,n,m,'   fx ='
  28. c     write( * ,'(9f8.3)') (fx( i ),i=1, m )
  29.     mm = m/2+1
  30.     dfdx(1) = fx(mm)
  31.     m = n+1
  32.     do 500 i=1,n
  33.     j = 3 ** (i-1)
  34.     dfdx(i+1) = (fx(mm+j)-fx(mm-j))/h2
  35. 500   continue
  36.     if (ndord.eq.1) goto 1000
  37.     do 900 i=1,n
  38.     do 800 j=i,n
  39.     i1 = 3**(i-1)
  40.     j1 = 3**(j-1)
  41.     m = m+1
  42.     if (i.eq.j) then
  43.     dfdx ( m ) = (fx(mm+i1)+fx(mm-i1)-fx(mm)*2)/h/h
  44.     else
  45.     dfdx ( m ) = (fx(mm+j1+i1)+fx(mm-j1-i1)
  46.   &       -fx(mm+j1-1)-fx(mm-i1-1))/h2/h2
  47.     endif
  48. c   write( * , * ) 'i,j,i1,j1,m,dfdx =',i,j,i1,j1,m,dfdx ( M )
  49. 800   continue
  50. 900   continue
  51. 1000 continue
  52. c     write(*,*) 'n,m =',n,m,'     dfdx ='
  53. c     write(*,*) (dfdx ( i ),i=1,m )
  54.     return
  55.     end
复制代码
该子程序是有限元法中求解Jacobi矩阵的一段程序。
该子程序中传入参数的说明:f是用来坐标变换的函数,分别实现对各坐标的变换,x为局部坐标,n为问题的维数,dfdx为原坐标对当地坐标的导数,ndord为最高导数的阶数,iv为对维数的循环数。我看了好久,也没有弄清楚程序中红色部分的判断是起什么作用的?请大侠指点,非常感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-11-2 01:32 , Processed in 0.029321 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表