logo资料库

C语言与有限元程序设计.pdf

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
语 言与有 限元 程 序 设 计 叶 又 戚 燕 上海交通 大学 国家模具 工程 中心 上海 以刀 上海 大学计算中心 上 海 匹口刀 本 文通过 与 民件以入 语 言的比较 , 说 明利用 语 言开发有 限元 程序 的可行 性 。 摘 要 结果表 明 , 语 言不但 完全 可 以实现 的语 法 功 能 , 拥 有更 强 大 的实用编 程 环 境 , 同时 由于 提供指针变量 、 动态 内存分 配 函数和结构变量 , 使其编 写 的软 件在维 护 性 、 可读 性和 内存利用 效率方 面具 有 明显 的优势 。 文 章最 后还 将 语 言与最近 出现 的 ’ 召 作 了简 单比较 。 皿 关健词 语 言 有 限元 程 序 民 入 皿认 卯 淤 ‘ 丫劝 了 从“如“ 旅 侧刀 及砂袱涵呀 ‘旨公叮 , 肠叫加 £人洲份移 更加奴 ”匆尸 , 从叫内葱创泊刃 。 肠叫妞吨 ‘冶留 , , 四甲湘 伪自阶勿 , 腼卿‘ 滋 “刃刀 加奴翻 毗 角阳祀 朋详 嗯 袱 印 帅 卜 加 班田 , 卯 招 涌 曰币 服双幻巧 心倪 丘 开 入 班 面 山 , 此目曲 犯“ 幻理 加姗民 如 如 , 切山 甲 即 详解 面 沈 朋 朋 切叨 助叭 面 卿 别网 刊 , 叨 , 比 , 兀 珑 ” , 正山 甲详 即和叻 切邵 叮屹 巧卿朋 件 如 引 言 砰 入 是 最 早 出现 的 高级 编程 语 言之 一 。 国 际标 准化 组 织先 后 推 出了 、 以及 最 近 的 ’川 三种标准版本 , 至 今 已 发展 了 三 十余年 , 在科学计算 领 域有 广泛 的应 用 。 当前有 限元 程 序 的源代码 几 乎 清一 色是 由 件沙入 写成 。 而 语 言 的发 展 仅 有 十几 年 , 但却有 一 种后来 居 上 的趋 势 , 开 始成 为开 发高质量 软件 的主 要 编程 语 言 。 目前 收稿 日期 夕荀 一 一 。 叶又 , 博士 , 主要 研究领域 三 维板料成形有 限元数值模拟 系统 的开 发 。 · ·
在各种机 型 和各种操作系 统上 都运 行 有 语 言的编译 器 , 提 供 了 丰 富 的库 函数 和 实用 程 序 , 以 改善用 户 一 程 序界 面 , 效率 , 并 简化 编程 。 本文 的 主要 目的是 通 过 与 民 入 的 比较 , 说 明利用 语 言 开 发 有 限元 程 序 的可 行 件认双 刀 的全 部语 法功 能 , 它提供的 指 针 数 据类 型 实现 了真正 意 义 性 。 语言不但包容 了 上 的 内存 动态分配 。 同时 , 合理有效地定义结构数据类型 可大大增加程序可读性 和维护效率 。 八 是 语 言 的最 新 标 准版 本 。 由于 采 用 了新 的计算 机 软件科 学 理论 , 其 功 能实际上 已超 过 语 言 。 作 者对两 者作 了概要 的 比较 , 从 实用 的角度提供 了一 些 建议 。 语 言与 的 主要语 法 结 构 比较 最 初 出现 是用 作 操 作 系统 的记 述 语言 , 发展 之 初 一 直 作 为“ 较低级 语 言 ”编写 与硬 件关 系密 切 的底层 软件 。 由于 伏 的成 功 和 广泛 使用 , 语 言 开 始 流行 起 来 , 并成 为 一 种普 遍 使用 的程序 设 计语 言 。 由于 两 者产生 的背景 不 同 , 它 们 是存 在 差 异 的 。 主 要 表 现 在 函数 的 调用 和参数 的传递 , 特 别 是 多 维 数组 的 处 理 方 面 不 如 ’ 召 直 观 和 易 于 理解 。 ’件 召 从 一 开始就用 于科 学 计算 , 必 须 处 理 诸 如 矩 阵 一 类 的 数 学 问 题 , 多 维 数 组 是 它 的主 要 使用 工 具 , 而 语 言一 开 始 主要 是 面 向 系 统 程 序员 的 , 在 应 用 中很 少 会 涉 及 多 维 数 组 。 但这 并 不 意 味着 在 处 理 多 维 数 组 时会 遇 到很 多 麻烦 。 文【 〕提 供 了利 用 指 针 数据 类 型 处 理 多 维 数组 及 其 在 函数 中传递 的两 种方 法 。 利用 这 些 方法 可 以方便地 将 ’ 的数组 操作移植成 语 言 的 。 竹 与 一 样 , 也是 一 种 结 构 化 的 程 序设 计语 言 。 结 构 化程 序 设 计要 求 程 序 的 逻辑 结 构有 顺 序 、 选 择 和 循环 三 种 基 本 结 构 , 提供 了 编 写 结 构 化 程 序所 需 要 的语 句 。 同时 , 使用 也 便于进 行模 块 化程序设 计 , 程 序 由众 多 的 函数 组 成 , 函 数是进 行模块 化程 序设 计 的 的 子 程 序功 能相 似 。 另 外 , 还 提供 了较 ’ 认入 丰富得 多 的运 算 符 基 本 单位 , 与 印 和 数据类 型 , 甚 至允许 用 户 利 用 基本数据类 型 自己 定义 数据 类型 。 的主 要 可 执行 语句 与 有 明确 的语 句对 应关 系 , 并完成相应 的功 能 , 见 表 。 表 认入 竹 主要句法与 语 育的对应关 系 功功 , 曰曰石 … … 竹祝 日日另 】】刃 二 , , 洲 二 , 】 】】 此 试 … 试 … 日阳 二 , , , , 二 研阻呢 子程序名 … 类 型 函数名 … 侧 】, 书 , … …… ” 花址 以刃 … 。丫 】 抽比 酗 。 过过
动态 内存分配技术 让我们先来研究一 下 利用 八 编写 的有 限元 程 序所使 用最广 的一 种 内存动态 管 理方法 。 该方 法 在程序一 开 始就在无 名公 共 块 中定 义 一个 大数 组 , 在 程 序不 同运 行 阶段 存 放不 同的内容 。 长心 月 让 口刀 二 众刀 』“ 日 月卫妊 月 加 一一矶服 刃 一一 一一一 ’ 巧 班任飞 下侧汀幻 巴 汀 芜巧 加以 兀 刊 , 刀 , 义 砚卯 刃 关 赞 蹄刃 并 岌 】闻 理 , , , , , , 即 · … 二 二 二 二 二 二 刊日刀 州 刃 , 闻荆 , 刀 , , , , 刃 , … 致印 口叮 卫 , 一 , 一 压任 〕 亚洲 夕于 , 卜 , 刃 刃 , , , 由于 数组 的大小 必 须事 先 给定 , 为满 足 解 题 规 模 , 会 尽可 能开 得 足 够 大 。 当求解 一 个 较小 问题 时 , 它 同样 占据着很 大 的 内存 , 无 疑 造 成 计 算 机 资 源 的浪 费 , 这 种 情 况 对 于 目前 多任
务 多进 程 的操 作环 境更 为重 要 。 同时 , 为 了求 解 更 大 规 模 的 问题 , 还 必 须 调 整 数组 的 大 小 , 重新 编译 源 程 序 。 实 际计算 间题 的大 小 是 很难 确定 的 , 利用 上 面 方 法 编写 的 程 序实 际 上 在 生 成 执 行代码 时 就 决定需 要 内存 的数量 。 更一 般 的 情况 是 , 如 果 一 个 变 量 被 指 定 为 全 局 变 量 如 上 面 的 数 组 , 则 它 在整 个 程 序运 行 期 间都 占据存储单 元 。 如 果 是 自动 变 量 和 形 参 , 则 在其所 在 的子 程 序 执行 期 间 , 它 占有 的存储 单元 也 是不 释 放 的 。 这 种 方 法 处 理 问题 , 缺乏 灵 活性 , 往 往 会 浪 费 许 多 内存 , 不 是 真正 意义 上 的动 态 内存 分配 。 人们应该设 想 能否 找到这 样 一 种方法 , 根 据需 要 临 时分配 内存单元 以 存放 有 用 的数 据 , 当数据不 用 时 又 可 以 释 放 存储单元 。 此 后 这 些 存储单 元 又 可用 来 分配 给其 它数据 或程 序使用 , 语 言使 用 指 针 数 据 类 型 和 标 准 的 动态 内存 管理 函 数 可 以 非 常方便地 实 现 这 一想 法 。 。目 , 分配 个 变量 的 内存连 续 空 间 , 每个 变量 字 节 大 小 是 , 吮 。 由于 此 函数类 型 说 明时是 故 在使用 时要 强 制转换 为 所 用类 型 变 量 的指 针 。 , , 关 帕 补 户 , ‘ , , 、 的大 小 可 根 据解 题 的规模 在 程序运行 时赋 值 。 数 组 共 占用 个 字 节 内存 , 夕 共 个 字 节 内存 。 当数组 、瞬 不 再 需 要 时 , 它 们 占用 的 空 间 可 简单 地 使用 下 面语 句 占用 释放 触 阮 释放指 针 变 量 、衅 指 向的存储 空 间 , 交 还 给 系 统 分 配 它 用 。 注 意 此 时 、解 不 能 是 任 意 地 址 , 而 只 能是 由 。目 函数 所 返 回 的地 址 , 并 且 不 能 再 被 重 新 赋 值 , 否 则 将 引起 内存 管理 混 乱 。 利 用 结构数据类 型增 加程序 的可 读性 语 言 通 过使 用 结 构 数 据 类 型 把 一 组 不 同类 型 的数 据 同时 又 是在 逻 辑 上 相关 的数 据组 成 一 个 有 机 的整 体 , 以便 于 引用 。 有 助 于提 高程 序 的可读性 和加 快程 序开 发 的效 率 。 鱿 阂以 叨 , 节点序号 压坦 , , ‘ 节点坐标 ‘ 月朋 山 , 叮 , ‘山丘 , 听 , ‘ ‘ 节点位移 , , 节点 约束情况 , 二 司 二 节点信息 日位 , 司 、 , 单元序号 , 二 以 山阴浏肠 二 节 点序号指针 二 单元节 点数 ,
沐 翻坦日 , 签 高斯积分点数 朴 二 单元信息 二 功 创 显 然很 难有 效地 管理 以 上例 子 中有关结 点和 单元 等类 型 的数据 , 它 只 能 使 用 一 大堆数组 或 变量 去分别描述 它们 , 过 多 的毫无 规 律 的名 字无 疑 给编 写 和 阅读程 序造 成 了 困难 。 语言与 刀 尤 和 巧 年 , 仟认 卯 被 国际标 准化组 织 功能 和 先进 性方 面 都有 突破性 进展 , 吸 收 了 巧 认可 , 并正 式公布 。 与 功 八 相 比 , 在 、 语 言 的 长 处 , 提 供 动 态 内存 分 配 功 能 工陀彭 语 句 、指 针 变量 、结 构类 型 , 并允 许用 户 自己定 义 数据类型 , 增 强 了程 序设计 的可 读性和 易维 护 性 。 同时 还 大 大 发展 了 ’ 八 语 言原 有 的数 值计算优势 , 主要 表 现 在对数组 的处 理 上 。 如引进 了数 组 直接运 算 、 数组 取 函 数 、数组 直 接赋 值 、数组 与标量 运算 等概念 。 使数组 的运算从 繁琐 的对 数组 元 素 的运 算 中解 脱 出来 , 大 大 简 化 了程 序 的编 写 , 也 为 以 后 大 型 机 平 行算法 准 备 了条 件 。 如对 、 、 三 个 形 状 相 同的数组 , 一 条 简单 的语 句 二 的 功 能 确 实要 比 语 言强 。 即可 实现 二 个 数 组 的求 和 。 在 数值 计 算方 面 , 在 程 序设 计语 言 的发 展 过 程 中 , 皿 创 语 言 被认 为是 科学 计算 的专用 语 言 , 认 也 不 例 外 。 近 年来 , 随着计算机 软硬 件技 术 的 发 展 , 数 据 结 构 、 数据库 管理 技 术 、 可 视 化 与 计算机 图形 学 、用 户 接 口 、系统集成 以 及 人 工 智 能 等 领 域 的成 果 被 逐 渐应 用 到 有 限元 软 件 中 , 有 限元 程序设 计并 不 仅仅 局 限 于 单一 的科 学 计算 , 需 要 涉及 众 多 的软件 开 发 领 域 。 毫无 疑 问 , 如 却很 难 实 现 。 另 一方 面 , 从 软 件 的编程 环 境来 看 , 目前 创 的编译 器极 少 , 只 有在少 数 高性 能 图形 工 作 站 、 大 型机 、 巨 型 机 上 开 发 出 的专用 系统 。 而 语 言 的 编译 系统 相 当普 及 , 可 以 运 行 在 各种 机 型 上 , 便 于 实 现跨平 台的软件 系统集成 。 语 言可 以提 供这 类软件开 发 所 需 的功能 , 而 用 相 比而 言 , 如 果纯 粹考 虑数值计算能力 , 砰丹 更 强 。 但考 虑 到今后 各 种 软 件技 术 与有 限元程 序 的集成 , 语 言是 比较 明智 的选 择 。 算 例 分 析 为 了 比 较 , 我 们 对 文献 〔 提供 的 、内存 一致 的 语 言程 序 。 在 入 程 序进 行 了 翻译修改 , 编制 了结构功能 基 本 的微 机 上 进 行计算 比较 , 见 表 表 与 灿入 万 源代码 、 执行代码和解题规模的比较 源源 代码码 人人入 一 编译器器 幻 玉刀 」记 从月 礴 创 知 一 入 , 一 ’ 入入 由硬 盘大小决定 由公 共 区 数组 的大小决定 。 源文件大小小 执行代码大小小 肠 〔政 解题规模模 日仪】自由度度 无 限制 以力 自由度度 无 限制
分月沪门七匕,翔工 ,卜人‘卜 比较 以 上 四种 情况 我们 发 现 , 与 只 在 源 文 件 大 小 基 本相 当时 , 执行 文 件 代 码 却 相 差很 大 , 这 主要 是 因为 用 功 编 程 时 , 必 须 考 虑 到 求 解 问题 的 最 大 规 模 , 预 先 开 好 一 个 大 数组 , 执 行 文 件 的大小 在 很 大 程度上 是 由这 个 数组 的 大 小 决定 的 。 而 语 言提 供 的 指 针 数据类 型 和 动态 内存分配 函数在 程序运 行 时根 据 解题 规 模动态 地 分 配 内存 大小 , 无 须 预 先 留 出空 间 。 在 计算 时 间方 面 , 对 于 同样 的 可 计算 问 题 小 于 以沁 个 自由度 , 四 种 环 境大 致 相 当 , 语 小 , 装 入 内存更 言稍 快 , 与文 献 〔 〕结论基 本 一 致 。 这 可 能 是 由 于 的 执 行 代 码 较 快些 所 致 。 利 用 、 一 编 译生 成 的执行 文 件 , 无 法 突破 的 翻 常规 内存 的限 制 , 解 题规 模较 小 。 认 可 以利 用 硬 盘模 拟 内存 , 大 大提 高 了解题 规模 。 刊日八 环 境 利 用 功 职汀 的 内存 管 理技术 , 解题 可 以直 接 利 用计 算 机 提 供 的 所 有 常规 和 扩 展 内存 进 行 计算 , 同 时 计算 速 度 也 有 明 显 提 高 。 对 于 仪心 个 自由度 以 上 的 问题 , 效 率一 般会 高 出 几倍甚 至 几 十倍 。 州 最 后 对 程 序 的移 植性 作一 点 说 明 , 将 须 作 任 何 改 动 , 而从 一 的大 小 是必 须 变 动 的 。 八 向 源 程序 移植 到 环 境 时 , 程 序 无 认 移 植 时 , 为 了增 大解 题 规 模 , 有 若 干 数 组 盛 由于 目前 的编译 器 主 要 是利用 它 的 数组 并行 处 理 能力 , 多 见 于 大 型 机 、 巨 型 机 系 统 , 不 便进 行 比较 。 故 文 中无算 例 。 结 束 语 语 言作 为一 种优 秀 的程 序 设 计语 言 , 已 广 泛 用 于 开 发 各种实用 程 序 。 然 而 在 数 值计算 领域 , 尤 其 是 对 有 限 元 程 序 的 开 发 使 用 甚 少 。 追 根 求 源 , 这 其 中历 史 的 原 因 是 不 容 忽 视 的 。 只 语 言也 日趋成 熟 。 当时 出 版 的 有 限 七 十 年代是 有 限元 发 展 的 黄金 时 代 , 与 此 同 时 元 名 著 , 如 的 记 的 司 脚 等 。 从 理 论 到程 序 结 构 一 直影 响 了 以 后 的 几 代 学 者 。 名 有 限 元 软 件都是 从七 十年代 用 印 的 角 度 , 我们 不 应 当也 不 可 能 重 新用 语 言 去 改 写 如 此 庞 大 的软 件包 。 最 新 推 出 的 或 砰丹队 、 、 凡引下队 等 著 发 展 起 来 的 。 从 保 护 现 有 投 资 八 版本 虽 然 可 以 完全 实 现 语言 同样 的功 能 , 然 而其 软件 开 发 环 境 和 软 件 的集 成 性 等方 面都 远 不 如 语 言 , 所 以 笔者认 为 语 言仍然是最 好 的选 择 。 九 十年 代兴 起 的 面 向对 象 的编程 技 术无 疑 给软件开发 带来 了新 的方 法 , 语 言的后 继 者 提供 了支持面 向对 象 的程 序设计 所 有 特 征 。 如何利 用 编写 面 向对 象 的有 限元程 序是 作者下 一 步 的主要 工 作 。 参 考 文 献 〔 谭浩强 , 语 言程序设计 , 清华大学 出版社 , 引 〔 油 一 翔即 〔 〕珑 〔 ’‘ 。 词 。珊“ 一 加 加旧 舫司 。 撇触眠 〔 〕沈彬 , , 场 呼峨罗 , 币 日 资呀阁 刀 习城 卯 程序员 编程 指南 , 北 京 希望 电脑公 司 , 卯 , 。司 ‘ 溯 , 尹 ‘ , 伪呷 , , 一 , 期 巧匆朋耐吧 恤吧月哪 , 伪碑双 加 , 柑 , 一 , ’
分享到:
收藏