C语言与有限元程序设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
N 6二褚 +NU P-裸刃D N
CL 1" AN )AN)AN)AN)AN)AN )N O 00 AL N (1,(2,(3,(4,(5,(6,D F · )
R UR ET N
E D N
IP N SPNN , FXYZN O ,. NI UN , PM O , , D F.) M P D , , . IP a R A - 一 , 一 ) MI T L SA H0 Z d E ( DA.S N SP1浏PP1,D FN O , I M I N N () N()M O(D F1 E M O U )
w ia < 卜‘ + { =, 二 + ) i
}
SBO T E子程序名( UR UI N ·)
E D N 肚 〔N 上f R
类砚函 效名(. .) .I
1
双 由口, ;
P N ", ‘ I T 旧 ’
nm N I U c C TN E O Om亡 m m
。d< 刀 《· < a 卜 d 】 e_ : 习: m 1 m
NN- U P 一一N MB R N D P M U E O O E F O
N O- DF
NO S D-
NM U MR D! U O F M P R D P I O tI ! F " S N E M F J - & m E O O
S IR F WrC O S M E R U L P E IIN O D BE CSO O R
1 引
言
FRR N O TA 是最早出现的高级编程语言之一。国际标准化组织先后推出了FRRN O T A W, FRR N 以 O TA 7 及最近的FRR N 三种标准版本, 7 OTA 9 0 至今已发展了三十余年, 在科学计算领 域有广泛的 应用。当前有限元程序的抓代码几乎清一色是由FRR N O TA 写成。而C 语言的 发 展仅有十几年, 但却有一种后来居上的 趋势, 开始成为开发高质t软件的主要编程语盲。目 前
So - 1 at w -
. 21
万方数据
3 动态内存分配技术
让我们先来研究一下利用FRR N 编写的 O IA 7 7 有限元程序所使用最广的一种内存动态管 理方法。 该方法在程序一开始就在无名公共块中定义一个大数组A 在程序不同 , 运行阶段存
放不同的内容。
C R1〔R M M九N A L
C M O A 1 00 O M N 0 1) (0
】 A A 亏 L E
L O 二 10 0 T M 0 00
C L N D A L O D叫
叹用R UI N D7 O m犯 O F时
C C C
收 期: 一 加。叶又, 主要研究领城: 维板 稿日 t 仍一 " 博士, 三 料成形有限元 棋拟系 开发。 数值 统的
·2 · 0
万方数据
在各种机型和各种操作系统上都运行有 c 语言的编译器, 提供了丰富的库函 数和实用程序, 以改善用户一 程序界面,O U 效率, 并简化编程。 本文的主要目 的是通过与FRR N 的比较, O TA 7 7 说明利用 c 语言开发有限元程序的可行 性。c 语言不但包容了F RR N 的全部语法功能, O TA 7 7 它提供的指针数据类型实现了真正意义 上的内 存动态分配。同 合理有效地定义 时, 结构数据类型可大大增加程序可 读性和维护 效率。 FRRN 是FRR N 0 O TA 语言的最新标准版本。由 O TA 9 于采用了新的计算机软件科学理论, 其功能实际上已超过 c 语言。作者对两者作了概要的比 从实用的角度提供了 较, 一些建议。
irm :h勺rd i 耐 mm ai i .s如 c p s n t n ,a l nn n 山 e曲 i aa t y eo l l It o a o y a bt r va i a, m rn y i
is p dc s . s l iu e i y sd m s F i E mnP gm O TA 7 FRR N itl e r r 7 TA 9 ne t a FRR N O e o 0
2 语言与 F R R N 的主要语法结构比较 A 7 C OT 7
c 最初出现是用作U I操作系统的 N X 记述语言, 发展之初一直作为“ 较低级语言” 编写与硬 件关系密切的 底层软件。由于U I 成功和 NX的 广泛使用, 语言开始流行起来, c 并成为一种普 遍使用的程序设计语言。由于两者产生的 背景不同, 它们是存在差异的。主要表现在函 数的 调用和参数的 传递, 特别是多维数组的处理方面不如FRR N直观和易于理解。FRR N O TA O TA 从一开始就用于科学计算, 必须处理诸如矩阵一类的数学问题, 多维数组是它的主要使用工 具, 语言一开 而c 始主要是面向系统程序员的, 在应用中 很少会涉及多维数组。但这并不盒 味着在处理多维数组时会 遇到很多麻烦。 3提供了利用指针数据类型处理多维数组及其 文【〕 在函 数中传 递的两种方法。利用这些方法可以方便地将 FRR N的数组操作移植成 c O TA 语言
关扭词 C 语言 有限元程序 FRR N O TA 9 O TA 7 FR R N 7 0
C N U G A D N T F .l L G A E N F I E Py A I f ENjP OG A ' R MMMG R
Y o Q Y r e u Y , i a n
Cn rg FRR N ts r w t stiy g n a ifi api wh TA 7, a ri s ual un C u e ne an i O t 7 h p ee e h i i s lg g n i p v e b t i a it 二d epe . ru i it . t n a n oy pt a ie t a e lmn Te l nce t C g g o n c l l ces l vo th e t esh l u e l o e y v h s d a a t m e h e o u r6 l r m g wrl e r a n - a o a n d F RR N , ao p ve O TA 7 bt c ri 二 p f pc ap gm i - - , 7 u l a od s n d aimmrao ta t s s cr da s 咫 p gm i阮 y m eo cm f c na t te a t e 阮 n c y l a u i n r ud y , n o d u t p rr oC o a f s
C语言与有限元程序设计
叶 又 戚 燕
( 上海交通大攀国家棋其 C D工程中心 上海 加03) 几 0 0
( 上海大学计算中心 上海 匆印力
摘 要 本文通过与FRR N 语官的比 说明 O TA 7 7 较, 利用C 语言开发有限元程序的 可行性。 结 果表明, 语官不但完 C 全可以实现FRR N 的语法功能, O TA 7 7 拥有更强大的实用编程环境, 同时由 于提供指针变f、 动态内 存分配函 数和结构变t, 使其编写的软件在维护性、 可读性和 内 存利用效率方面具有明显的优势。文章最后还将C 语言与 近出 最 现的FRRN 作了 OTA 9 0 简 单比较。
释放 :
r ( ) fe l; ep i 2; f p) m(
D ES N )Y1, 1 I NO X1,() () M I ( Z
由 于A 数组的大小必须事先给定, 为满足解题规模, 会尽可能开得足够大。当 求解一个 较小间题时, 它同样占 据着很大的内 无疑造成计算机资源的浪费, 存, 这种情况对于目 前多任
·2 . 2
万方数据
务多进程的 操作环境更为重要。同时, 求解更大规模的问题, 为了 还必须调整A 数组的大小, 重新编译源程序。 实际计算问题的 大小是很难确定的, 利用上面方法编写的程序实际上在生成执行代码时 就决定需要内 存的数龙。更一般的情况是, 如果一个变量被指定为全局变量( 如上面的A数 组)则它在整个程序运行期间都占 , 据存储单元。 如果是自 动变盆和形参, 则在其所在的子程 序执行期间, 有的 它占 存储单元也是不释放的。 这种方法处理问 缺乏灵活性, 题, 往往会浪费 许多内存, 不是真正意义上的动态内 存分配。人们应该设想能否找到这样一种方法, 根据需要 临时分配内存单元以 存放有用的数据, 数据不用时又可以释放存储单元。 当 此后这些存储单 元又可用来分配给其它数据或程序使用, 语言使用指针数据类型和标准的动态内存管理函 c 数c o(可以非常方便地实现这一想法。 a c) U 帕 , a cns ) 记 cl(, ; l o i z e 分配n 个变A的内 存连续空间, 每个变2字节大小是 s 。由于此函 i z e 数类型说明时是 vd o * i , 故在使用时要强制转换为所用类型变A的 。 指针·
i* n P; t I
l t p; fa赞 2 o
p= i* o(l ; ) 1 ( t ) lc , n c n2 a p二 fa ) f ( 4 , ; 2 (o * o n ) lt c c2 a l
n, 的 小 根 解 的 棋 程 运 时 值 数 I 用nx 个 节内 声共 l2 大 可 据 题 规 在 序 行 喊 。 组P共占 l 2 宇 存, n 占 2 字 内 。 数 l 2 再 要 , 们 用 空 可 单 使 下 语 用nx 个 节 存 当 组p p不 孺 时 它 占 的 间 简 地 用 面 句 4 ,
F ORT AN 7 R 7
c
二 二二 (》 ,。
f .) }V (:1 .7
曰 只份
} 一
ed. l () s { e
i.) f. f ( . Hale Waihona Puke Baidu
日 .} }
E D N D'
D I ,, O 6c =n D 二 b OJ a ’
E D N DO
I
。, ,二* 。 (.<、十 ) 二1 .二 {
的。
与FRR 7 N 一样, 也是一种结构化的程序设计语言。结构化程序设计要求程序的 OTA 7 c 逻辑结构有顺序、 选择和循环三种基本结构, 提供了编写结构化程序所需要的语句。同时, c 使用c 也便于进行模块化程序设计, 程序由 c 众多的函 数组成, 数是进行模块化程序设计的 函 基本单位, OTA 与FRR N的子程序功能相似。 另外, 还提供了 O TA 丰富 c 较FRR N 得多的 运算符
和数据类型, 甚至允许用户利用基本数据类型自己定义数据类型。
FRR N 的主要可执行语句与c 确的 7 O TA 7 有明 语句对应关系, 并完成相应的功能, 见表1 ,
袅 1 O T A 7 主要句法与c语官的对应关系 F R R N 7
气Nr o f(D i a}r A & . i D e w } Cr , h Ja m y S y. 0 oe 9 wm wa n - i a , h 200 B m 03 权C哪 吨 h t'匆, - m w i : , 州 2 M ) “ C . } S h m 1 V m t o
CM O A O M N M
】 A A 妞:L
C M O / D / N ,D FN O O M N O E N PN O ,S D N U
N1 二1
N 1二NI M 」 P + N N 3二N NU L+ NP
N 4二心 +N O -N N D F UP
N 5=N N N -N 4+ U P 段坦
CL 1" AN )AN)AN)AN)AN)AN )N O 00 AL N (1,(2,(3,(4,(5,(6,D F · )
R UR ET N
E D N
IP N SPNN , FXYZN O ,. NI UN , PM O , , D F.) M P D , , . IP a R A - 一 , 一 ) MI T L SA H0 Z d E ( DA.S N SP1浏PP1,D FN O , I M I N N () N()M O(D F1 E M O U )
w ia < 卜‘ + { =, 二 + ) i
}
SBO T E子程序名( UR UI N ·)
E D N 肚 〔N 上f R
类砚函 效名(. .) .I
1
双 由口, ;
P N ", ‘ I T 旧 ’
nm N I U c C TN E O Om亡 m m
。d< 刀 《· < a 卜 d 】 e_ : 习: m 1 m
NN- U P 一一N MB R N D P M U E O O E F O
N O- DF
NO S D-
NM U MR D! U O F M P R D P I O tI ! F " S N E M F J - & m E O O
S IR F WrC O S M E R U L P E IIN O D BE CSO O R
1 引
言
FRR N O TA 是最早出现的高级编程语言之一。国际标准化组织先后推出了FRRN O T A W, FRR N 以 O TA 7 及最近的FRR N 三种标准版本, 7 OTA 9 0 至今已发展了三十余年, 在科学计算领 域有广泛的 应用。当前有限元程序的抓代码几乎清一色是由FRR N O TA 写成。而C 语言的 发 展仅有十几年, 但却有一种后来居上的 趋势, 开始成为开发高质t软件的主要编程语盲。目 前
So - 1 at w -
. 21
万方数据
3 动态内存分配技术
让我们先来研究一下利用FRR N 编写的 O IA 7 7 有限元程序所使用最广的一种内存动态管 理方法。 该方法在程序一开始就在无名公共块中定义一个大数组A 在程序不同 , 运行阶段存
放不同的内容。
C R1〔R M M九N A L
C M O A 1 00 O M N 0 1) (0
】 A A 亏 L E
L O 二 10 0 T M 0 00
C L N D A L O D叫
叹用R UI N D7 O m犯 O F时
C C C
收 期: 一 加。叶又, 主要研究领城: 维板 稿日 t 仍一 " 博士, 三 料成形有限元 棋拟系 开发。 数值 统的
·2 · 0
万方数据
在各种机型和各种操作系统上都运行有 c 语言的编译器, 提供了丰富的库函 数和实用程序, 以改善用户一 程序界面,O U 效率, 并简化编程。 本文的主要目 的是通过与FRR N 的比较, O TA 7 7 说明利用 c 语言开发有限元程序的可行 性。c 语言不但包容了F RR N 的全部语法功能, O TA 7 7 它提供的指针数据类型实现了真正意义 上的内 存动态分配。同 合理有效地定义 时, 结构数据类型可大大增加程序可 读性和维护 效率。 FRRN 是FRR N 0 O TA 语言的最新标准版本。由 O TA 9 于采用了新的计算机软件科学理论, 其功能实际上已超过 c 语言。作者对两者作了概要的比 从实用的角度提供了 较, 一些建议。
irm :h勺rd i 耐 mm ai i .s如 c p s n t n ,a l nn n 山 e曲 i aa t y eo l l It o a o y a bt r va i a, m rn y i
is p dc s . s l iu e i y sd m s F i E mnP gm O TA 7 FRR N itl e r r 7 TA 9 ne t a FRR N O e o 0
2 语言与 F R R N 的主要语法结构比较 A 7 C OT 7
c 最初出现是用作U I操作系统的 N X 记述语言, 发展之初一直作为“ 较低级语言” 编写与硬 件关系密切的 底层软件。由于U I 成功和 NX的 广泛使用, 语言开始流行起来, c 并成为一种普 遍使用的程序设计语言。由于两者产生的 背景不同, 它们是存在差异的。主要表现在函 数的 调用和参数的 传递, 特别是多维数组的处理方面不如FRR N直观和易于理解。FRR N O TA O TA 从一开始就用于科学计算, 必须处理诸如矩阵一类的数学问题, 多维数组是它的主要使用工 具, 语言一开 而c 始主要是面向系统程序员的, 在应用中 很少会涉及多维数组。但这并不盒 味着在处理多维数组时会 遇到很多麻烦。 3提供了利用指针数据类型处理多维数组及其 文【〕 在函 数中传 递的两种方法。利用这些方法可以方便地将 FRR N的数组操作移植成 c O TA 语言
关扭词 C 语言 有限元程序 FRR N O TA 9 O TA 7 FR R N 7 0
C N U G A D N T F .l L G A E N F I E Py A I f ENjP OG A ' R MMMG R
Y o Q Y r e u Y , i a n
Cn rg FRR N ts r w t stiy g n a ifi api wh TA 7, a ri s ual un C u e ne an i O t 7 h p ee e h i i s lg g n i p v e b t i a it 二d epe . ru i it . t n a n oy pt a ie t a e lmn Te l nce t C g g o n c l l ces l vo th e t esh l u e l o e y v h s d a a t m e h e o u r6 l r m g wrl e r a n - a o a n d F RR N , ao p ve O TA 7 bt c ri 二 p f pc ap gm i - - , 7 u l a od s n d aimmrao ta t s s cr da s 咫 p gm i阮 y m eo cm f c na t te a t e 阮 n c y l a u i n r ud y , n o d u t p rr oC o a f s
C语言与有限元程序设计
叶 又 戚 燕
( 上海交通大攀国家棋其 C D工程中心 上海 加03) 几 0 0
( 上海大学计算中心 上海 匆印力
摘 要 本文通过与FRR N 语官的比 说明 O TA 7 7 较, 利用C 语言开发有限元程序的 可行性。 结 果表明, 语官不但完 C 全可以实现FRR N 的语法功能, O TA 7 7 拥有更强大的实用编程环境, 同时由 于提供指针变f、 动态内 存分配函 数和结构变t, 使其编写的软件在维护性、 可读性和 内 存利用效率方面具有明显的优势。文章最后还将C 语言与 近出 最 现的FRRN 作了 OTA 9 0 简 单比较。
释放 :
r ( ) fe l; ep i 2; f p) m(
D ES N )Y1, 1 I NO X1,() () M I ( Z
由 于A 数组的大小必须事先给定, 为满足解题规模, 会尽可能开得足够大。当 求解一个 较小间题时, 它同样占 据着很大的内 无疑造成计算机资源的浪费, 存, 这种情况对于目 前多任
·2 . 2
万方数据
务多进程的 操作环境更为重要。同时, 求解更大规模的问题, 为了 还必须调整A 数组的大小, 重新编译源程序。 实际计算问题的 大小是很难确定的, 利用上面方法编写的程序实际上在生成执行代码时 就决定需要内 存的数龙。更一般的情况是, 如果一个变量被指定为全局变量( 如上面的A数 组)则它在整个程序运行期间都占 , 据存储单元。 如果是自 动变盆和形参, 则在其所在的子程 序执行期间, 有的 它占 存储单元也是不释放的。 这种方法处理问 缺乏灵活性, 题, 往往会浪费 许多内存, 不是真正意义上的动态内 存分配。人们应该设想能否找到这样一种方法, 根据需要 临时分配内存单元以 存放有用的数据, 数据不用时又可以释放存储单元。 当 此后这些存储单 元又可用来分配给其它数据或程序使用, 语言使用指针数据类型和标准的动态内存管理函 c 数c o(可以非常方便地实现这一想法。 a c) U 帕 , a cns ) 记 cl(, ; l o i z e 分配n 个变A的内 存连续空间, 每个变2字节大小是 s 。由于此函 i z e 数类型说明时是 vd o * i , 故在使用时要强制转换为所用类型变A的 。 指针·
i* n P; t I
l t p; fa赞 2 o
p= i* o(l ; ) 1 ( t ) lc , n c n2 a p二 fa ) f ( 4 , ; 2 (o * o n ) lt c c2 a l
n, 的 小 根 解 的 棋 程 运 时 值 数 I 用nx 个 节内 声共 l2 大 可 据 题 规 在 序 行 喊 。 组P共占 l 2 宇 存, n 占 2 字 内 。 数 l 2 再 要 , 们 用 空 可 单 使 下 语 用nx 个 节 存 当 组p p不 孺 时 它 占 的 间 简 地 用 面 句 4 ,
F ORT AN 7 R 7
c
二 二二 (》 ,。
f .) }V (:1 .7
曰 只份
} 一
ed. l () s { e
i.) f. f ( . Hale Waihona Puke Baidu
日 .} }
E D N D'
D I ,, O 6c =n D 二 b OJ a ’
E D N DO
I
。, ,二* 。 (.<、十 ) 二1 .二 {
的。
与FRR 7 N 一样, 也是一种结构化的程序设计语言。结构化程序设计要求程序的 OTA 7 c 逻辑结构有顺序、 选择和循环三种基本结构, 提供了编写结构化程序所需要的语句。同时, c 使用c 也便于进行模块化程序设计, 程序由 c 众多的函 数组成, 数是进行模块化程序设计的 函 基本单位, OTA 与FRR N的子程序功能相似。 另外, 还提供了 O TA 丰富 c 较FRR N 得多的 运算符
和数据类型, 甚至允许用户利用基本数据类型自己定义数据类型。
FRR N 的主要可执行语句与c 确的 7 O TA 7 有明 语句对应关系, 并完成相应的功能, 见表1 ,
袅 1 O T A 7 主要句法与c语官的对应关系 F R R N 7
气Nr o f(D i a}r A & . i D e w } Cr , h Ja m y S y. 0 oe 9 wm wa n - i a , h 200 B m 03 权C哪 吨 h t'匆, - m w i : , 州 2 M ) “ C . } S h m 1 V m t o
CM O A O M N M
】 A A 妞:L
C M O / D / N ,D FN O O M N O E N PN O ,S D N U
N1 二1
N 1二NI M 」 P + N N 3二N NU L+ NP
N 4二心 +N O -N N D F UP
N 5=N N N -N 4+ U P 段坦