立即咨询有惊喜哦 !

logo
logo
简介
简介
联系方式
正脉科工有限元分析联系电话010-81387990
邮箱xyq@vipstq.com
 
 

基于对象的有限元程序技术要点核心

作者:管理员    发布于:2014-11-27 05:31:01    文字:【】【】【

有限元程序的开发,大致可包括:算法、参数传递、数据封装,三个部分。

之前,曾不断地听到有的人在讨论C++/FORTRAN的效率问题,很多人都认为,在作数值计算时,FORTRAN的效率比C++高的观点,其主要论据为:我用C++的对象思路编的程序比FORTRAN编的程序运行得慢!真的是这样吗?

首先,要明确一个观点,无论是什么语言,只要内存模式相同(托管/非托管)相同,编译生成的机器代码都是相同的,这由编译程序生成的目标代码决定,压根就没有语言的区别,只有不同语言的编译器、编译的优化目标决定。

现实中,的确有很多C++的对象化有限元程序运行的慢,原因在哪儿呢?从开篇介绍的三个技术要素中就可以找到答案。

1. 算法

两种语言在算法实现上都是基本相同的。而且,都可以用基于过程的思路编制同一个算法,其运行结果的差异基本上可以忽略不计。

2.参数传递

FORTRAN语言的参数传递基本上都是传递参数和引用,如果做过混合编程的人都清楚地知道这一点。有的人在用C++时,忽略了按值传递时的附加时间,就过多地引入了拷贝构造函数和等号运算符,从而降低了C++版的运行效率

3.数据封装

FORTRAN管理的数据对象主要是数组,最多能够激发indirect addressing;而C++呢,又是大量的copy constructor operator = 的运算。

说到这里,该明白的人就应该都明白了!对,就是这些东西才是影响速度的根源所在!

解决这个问题,需要明白FEM算法和C++的数据管理,先作两道练习题,这两道练习题能够作好,就可以尽情享受FORTRAN的效率和C++的强大的对象管理功能了。

Q1:编程实现以下算法:

VTarg = V0 + V1*a + (V2+V3)*b

其中,Vi是向量,很长(100K级别的吧)

Q2:遍历以下数据

WRAPER {

有很多个 DATA_GROUP,且DATA_GROUP 数据量很大,结构复杂

}

将所有的DATA_GROUP都赋值一遍,再将所有的DATA_GROUP提取出来一遍

 

 
 
联系我们
 
 
 
图片
图片
多行文字
电话:010-81387990
手机:18301320667
联系人:李老师
网址:www.101315.com
邮箱:bjxu@vip.163.com
地址:北京市房山区良乡绿地启航国际商务办公区14号楼西楼5层
脚注信息
北京正脉科工科技有限公司  电话:010-81387990                            关注微信了解更多信息
版权所有 Copyright(C)2009-2013 京ICP备14038777号-1                                                                    
图片
图片