注册 登录
编程论坛 汇编论坛

版主求救!关于fortran有限元编程

lengend 发布于 2008-10-21 17:57, 2263 次点击
最近在学习有限元,下面是书上fortran语言编写的一段程序,以前没学过fortran看不懂,请求版版大人给翻译下,多谢
SUBROUTINE KE(IO,NE,NWE,T,A1,A2,V,EK,BCA)
            DIMENSION B(7),BCA(7,NE),EK(6,6)
            DO 10 I=1,7
            B(I)=BCA(I,IO)
10            CONTINUE
            A=A1/B(7)*T
            DO 20 I=1,3
            DO 20 J=I,3
             I1=2*I
             J1=2*J
             EK(I1-1,J1-1)=A*(B(I)*B(J)+A2*B(I+3)*B(J+3))
             EK(I1-1,J1)=A*(V*B(I)*B(J+3)+A2*B(I+3)*B(J))
             EK(I1,J1-1)=A*(V*B(I+3)*B(J)+A2*B(I)*B(J+3))
             EK(I1,J1)=A*(B(I+3)*B(J+3)+A2*B(I)*B(J))
20            CONTINUE
            DO 30 I=3,6
             DO 30 J=1,I
              EK(I,J)=EK(J,I)
30            CONTINUE
            IF(NWE.EQ.0) GOTO 60
            WRITE(6,40) IO
40            FORMAT(/1X,'EK NE='I5)
            WRITE(6,50) EK
50            FORMAT(1X,6E11.4)
60            RETURN
            END
7 回复
#2
zklhp2008-10-21 21:05
偶也没学过…………
#3
你们都要疼我哦2008-10-21 23:39
不会... 只是在看计算方法的时候,例子用的是fortran,其他都没接触过.     数学计算的话,还是要学学fortran.
#4
cnhanxiao2008-10-22 04:32
FORTRAN是科学计算语言。很多年不碰它了(87年用)。。。你怎么不去FORTRAN论坛?
试着说说:
SUBROUTINE KE(IO,NE,NWE,T,A1,A2,V,EK,BCA)       *子例行程序KE(可以CALL调用)
            DIMENSION B(7),BCA(7,NE),EK(6,6)    *定义1个一维数组和2个两维数组
            DO 10 I=1,7                         *循环,10是下面的标号
            B(I)=BCA(I,IO)                      *给一维数组B(I)赋值。但BCA函数我没见过,外部函数?
10            CONTINUE                          *未完成7次循环继续
            A=A1/B(7)*T                         *表达式计算结果赋值给A
            DO 20 I=1,3                         *下面是双重循环——外循环
            DO 20 J=I,3                         *内循环
             I1=2*I
             J1=2*J
             EK(I1-1,J1-1)=A*(B(I)*B(J)+A2*B(I+3)*B(J+3)) *2维数组通过表达式计算后赋值
             EK(I1-1,J1)=A*(V*B(I)*B(J+3)+A2*B(I+3)*B(J))
             EK(I1,J1-1)=A*(V*B(I+3)*B(J)+A2*B(I)*B(J+3))
             EK(I1,J1)=A*(B(I+3)*B(J+3)+A2*B(I)*B(J))
20            CONTINUE                          *循环未完成继续
            DO 30 I=3,6                         *有是一个双重循环
             DO 30 J=1,I
              EK(I,J)=EK(J,I)
30            CONTINUE                          *循环未完成继续
            IF(NWE.EQ.0) GOTO 60                *如果NWE=0 转标号60处
            WRITE(6,40) IO                      *输出IO,6=显示器或打印机,40是表控格式,就是由40标号语句控制输出格式
40            FORMAT(/1X,'EK NE='I5)            *格式说明,似乎1X前多个/
            WRITE(6,50) EK                      *输出EK
50            FORMAT(1X,6E11.4)                 *同上
60            RETURN                            *返回操作系统
            END                                 *程序结束

EK(I1-1,J1-1)=A*(B(I)*B(J)+A2*B(I+3)*B(J+3))
假如I=2,J=3
I1=2*I=4,J1=2*J=6,这样上面的语句就相当于:
EK(3,5)=A*(B(2)*B(3)+A2*B(5)*B(6))
呵呵,就这意思。一维、二维数组你总该知道吧?B(2)就是元素在数组中第二个,EK(3,5)第三行第五列那个元素(行列式)。有限元离不开行列式,甚至需要用到张量(N维数组)。
FORTRAN在计算上得天独厚。

[[it] 本帖最后由 cnhanxiao 于 2008-10-22 04:41 编辑 [/it]]
#5
lengend2008-10-22 08:56
回复 4# cnhanxiao 的帖子
非常有用,多谢!
#6
ONEPROBLEM2008-10-22 09:31
[bo][un]cnhanxiao[/un] 在 2008-10-22 04:32 的发言:[/bo]

FORTRAN是科学计算语言。很多年不碰它了(87年用)。。。你怎么不去FORTRAN论坛?
试着说说:
SUBROUTINE KE(IO,NE,NWE,T,A1,A2,V,EK,BCA)       *子例行程序KE(可以CALL调用)
            DIMENSION B(7),BCA(7, ...

87年就接触编程语言了?
朋友,你太厉害了!俺1987年的时候还@$$%%^!$@^%#呢.
#7
cnhanxiao2008-10-22 09:48
回复 6# ONEPROBLEM 的帖子
呵呵,谢谢版主。
1987年上大学二年级,继BASIC后学的FORTRAN,就是从此喜欢上了电脑和编程。
不过我是业余消遣,因为我的专业跟计算机没关系。

版主的头像真可爱!
#8
zklhp2008-10-22 15:42
[bo][un]cnhanxiao[/un] 在 2008-10-22 09:48 的发言:[/bo]

呵呵,谢谢版主。
1987年上大学二年级,继BASIC后学的FORTRAN,就是从此喜欢上了电脑和编程。
不过我是业余消遣,因为我的专业跟计算机没关系。

版主的头像真可爱!


前辈啊 偶87年还没出生呢 现在上大一……
1