博文
量身定制有限元前后处理软件(2011-01-30 17:55:00)
摘要: 很多高校、科研机构拥有自主开发的有限元计算程序,但由于没有前后处理功能,而只能借助于其它商业软件的前后处理,这种方式使得操作复杂、而且效率低下。如果能结合成型的前后处理程序模块,集装成交互界面友好、并能进行图像显示的系统软件,将为这些计算程序的使用带来很大的方便。
本团队拥有多年的有限元软件开发经验,也积累了大量的有限元前后处理程序及构件。若您存在有限元程序前后处理功能的需求,可联系本人进行相关合作。(qingfds@sina.cn)借助于现有的前后处理功能模块,能够快速的为您打造出专用的有限元软件。
目前能提供的功能模块有:
◆界面功能:包括通用的软件框架、对话框、菜单栏、工具条;
◆平面CAD功能:点、线、面、圆弧、椭圆线、样条曲线;
◆平面区域网格剖分功能:三角形、四边形网格自由剖分(前沿推进法),四边形网格映射剖分;
◆平面区域后处理功能:梁弯矩、剪力图,实体单元非拟合、拟合等值线图绘制,云图绘制;
◆图形输出功能:支持图片输出为bmp、jpg格式文件。
声明:
1)目前CAD模型及网格剖分仅限于二维问题,后处理可包括三维问题。
2)友谊合作,对于科研应用不收取任何费用(商用另议)。
图例: (若图片无法显示,请查看sina博客页面)
三角形网格自由剖分
四边形网格自由剖分
等值线
......
从计算力学角度建立地震防御机制的探讨(2009-04-28 16:58:00)
摘要: [可以批判,但请勿转载]
从计算力学角度建立地震防御机制的探讨
完整的地震防御体系包括地震前预报和震后灾害预警两部分。预报是指地震未发生之前做出的预测和报导,预警是指地震正在发生或者已经发生以后做出的灾害预测和示警。本文以汶川地震为背景,从计算力学角度出发,对采用有限元方法进行地震预报和结构震后灾害预警做出探讨。
关键词:地震预报、地震灾害预警、有限元方法
第一篇:震前预报
引言:
四川5·12 地震发生之后, 人们在震惊、悲伤之余发出了这样的疑问:“为什么地震局没有提前预报?”按照地震局的观点,在现阶段地震是无法预报的。虽然地震局提出此观点有推卸责任的嫌疑,但事实上,准确预报地震确实是至今国际上悬而未决的疑难。
地震是地球内部介质局部发生急剧的破裂,产生的震波,从而在一定范围内引起地面振动的现象。地球内部介质局部发生急剧的破裂主要是指岩层的破裂。实际上,地震发生前,断裂带附近岩层一般会存在很长的活动时间,少则几年,多则数百年。目前,国内多采用GPS监测手段来观测地质变化。那么,既然可以监测到地层的运动变化,是否可以从力学角度预测出地层的断裂呢? 答案应该是可能的。
汶川地震:
印度板块以约40mm/a的速率与欧亚板块的北向汇聚造就了青藏高原广泛隆升和地壳物质沿大型走滑断裂带块体状地东向运移,受到华北地块鄂尔多斯和华南地块四川盆地等高强度块体的阻挡,在青藏高原东缘形成了局部挤压推覆构造带及其前陆盆地系统,这其中就包括作为青藏高原东部巴颜喀拉与华南两地块分界的龙门山推覆构造带。而2008年汶川8级地震主要由于沿龙门山断裂带的映秀-北川断裂突发破裂造成。
地震地质构造示意剖面
此次地震是一次兼有右旋走滑运动分量的逆断层型破裂事件,也是一次使近于平行的两条叠瓦状逆断层同时破裂的地震事件。虽然龙门山断裂带的整体滑动速率不大,但从汶川-茂县断裂向西到若尔盖草原及整个青藏高原东部的向东和向北运动速率都很大。应变在龙门山断裂带高度积累,当其超过龙门山断裂带和龙门山地壳物质的强度之后,沿龙门山断裂带的映秀-北川断裂突发破裂,形成巨大的5.12汶川大地震。
龙门山......
在,玉兰花开的时候(2009-04-05 20:37:00)
摘要:
玉兰花期很短,学校里面有白色和紫色两种,分布在水利馆、二校门、紫荆、图书馆、近春园、东门主楼。
在,玉兰花开的时候
天空静静漂浮着朵朵白云,
阳光瞒洒着大地,
清幽的气息四处环绕,
在,玉兰花开的时候,
徜徉。
莲池激起一层层涟漪,
护校河的水轻轻流淌,
河边的柳枝已渐发出新芽,
在,玉兰花开的时候,
远望。
春水滋润着园中的小草,
日晷静穆直射着远方的天空,
礼堂传来悠扬的歌声,
在,玉兰花开的时候,
停留。
岁月悄然爬上眉头,
时光从身旁轻轻划过,
花枝编织着美丽的梦想,
在,玉兰花开的时候,
寻梦。
2009/4/5
......
拱坝有限元网格自动剖分程序(2009-04-04 11:29:00)
摘要:拱坝与坝基有限元网格参数化剖分
程序示例
1、概 述:
拱坝是水工三种主要建筑中最省材料、最优美的一种坝型。本程序可实现拱坝与地基组合结构的自动网格剖分,并进行三维显示。拱坝与坝基的网格均采用参数化剖分实现,适合于材料均匀、河道方向结构无变化的地基。模型与剖分参数采用读取文件方式输入。程序采用c++语言编制,绘图采用opengl库函数。成果图如下:(以溪洛渡大坝示例)
注:给定拱坝设计参数文件,使用本程序可在1分钟内自动实现拱坝与坝基的自动建模及有限元网格剖分。
图1 成果图
2、基本剖分思路:
首先对拱坝进行剖分;
将坝基划分为左岸、右岸、底部基础,对三部分基础分别进行剖分;
将拱坝、左岸基础、右岸基础、底部基础合并,消除重合节点。
3、剖分步骤:
第1步、剖分拱坝
以拱厚方向网格数、拱圈高程方向网格数、梁向网格数为基本参数:
图3 拱坝有限元网格图
根据需要设置不同的网格剖分参数,可获得不同疏密程度的网格。
第2步、剖分基础
左岸基础剖分,如图所示,以左岸延伸长度、左岸网格数、底部延伸长度、底部网格数为参数,首先剖分基础与拱坝相连接的部分,
以河道上游延伸长度、上游网格数、下游延伸长度、下游网格数为参数,将左岸部分拉伸,
右岸基础剖分,与左岸类似,如图所示,以右岸延伸长度、右岸网格数、底部延伸长度、底部网格数为参数,首先剖分基础与拱坝相连接的部分,
以河道上游延伸长度、上游网格数、下游延伸长度、下游网格数为参数,将右岸部分拉伸,
剖分大坝底部基础,并向上下游拉伸,拉伸长度和网格数与左右岸基础参数相同,
第3步、组合网格
合并有限元网格,并消除重合节点:
左岸地基
大坝与底部地基
右岸地基
图9 组合有限元网格
4、附 录
附1:剖分参数
拱坝剖分参数:
拱圈左岸上游、下游曲......
动态链接库编程中巧用抽象类(2009-03-07 02:51:00)
摘要:
有限元动态链接库编程中巧用抽象类
动态链接库以dll为后缀,软件开发中采用动态链接库有利于开发时的分工、后期维护,以及防止代码泄密。有限元软件架构中,经常会将不同的功能划分为不同的模块,每个模块采用动态链接库来完成。如现有的有限元软件中,常常将计算模块以及图象显示模块设计为动态链接库,在界面程序中调用。
在动态链接库程序开发中,巧用抽象类常常可以起到举足轻重的作用。本文简单讲解在有限元程序开发时,如何在动态链接库中使用抽象类。
举个小例子说明:
制作有限元计算模块FemModel链接库,并在程序Main中调用FemModel链接库。
先看通常采用的方式,在VC6.0中新建FemModel链接库工程,建立有限元模型输出类FemModel,包含成员为节点数nPoint,函数ReadFile,其中ReadFile函数用来读取文件读取节点数。
//FemModel.h
Class __declspec(dllexport) FemModel :
{
public:
FemModel();
virtual ~FemModel();
void ReadFile(FILE* _ifile);//读取文件,设置节点数
private:
int nPoint; //节点数
};
FemModel.cpp内容略。
编译工程,生成FemModel.lib、FemModel.dll文件。
在程序Main中调用FemModel链接库时,需要在工程中导入FemModel.h文件,调用方式如下,
#include "FemModel.h"
int main()
{
FemModel ......
故乡,我永生永世的爱恋(2009-02-22 16:03:00)
摘要:[请勿转载]
故乡,我永生永世的爱恋
故乡,是一本厚厚的书,对于后迁于此的客人,每一页都蕴涵着崭新的诗篇;对于长居固守的主人,每一页都意味着简单而又朴素的生活;而对于离家在外的游子,每一页都珍藏着永远无法忘怀的记忆。
故乡,我永生永世的爱恋。
回乡的路在脚下无尽延伸,我的心却早已飞越出即将迈出的脚步。回忆着曾经无数次仰望的天空,曾经养育我成长的土地,真想立刻就见到那些久违的亲人、那些熟悉的房子,还有那缓缓流淌的小河……
故乡就在眼前,而我却停住了步伐。辛酸的抑郁涌入脑海,回想这些年穷愁而略显尴尬的学生生涯,流年似水,失落让我难以前行。已将近而立之年的我,本该到了衣锦还乡的时候,却依然过着拮据而又平淡的生活。看着自己一身寒酸的装扮,我仿佛已经见到了乡亲们期待的眼神里转瞬流露出的一丝丝遗憾和叹息。
夜色朦胧。
故乡,就在脚下。
终于见到了阔别多年的亲人。乡亲们依旧还是那么热情,一张张亲切的笑脸、一句句问候的话语,仿佛我还是曾经那个离开故乡时年幼的孩子。殷切的招待,加之旅行的疲惫,让我忘却了心中的惭愧和不安。
新的一年在欢乐的钟声中敲响。昨天已属于过去,今晨阳光明媚。拜过早年之后,我又来到了儿时嬉戏的小河边。
远远望去,河边只见一片冬日里衰败的景象,枯树、残草……唯有小河水依然清澈见底,无声无息的流淌。走过河中的小桥,粼粼的河水荡漾起我的心绪。也许,人生就是这平静流淌的小河,时光蹉跎着河边的一草一木,却蹉跎不了她清澈的面孔。岁月年轮,她依旧缓缓的延续着她自然、年轻的生命。也许,正是拥有这般顽强、执着的精神,才使得得她日复一日流淌不息;也许,正是拥有这副心平气静的胸怀,才使得她朝气蓬勃,永远散发着年轻的光彩。联想起我这几年在北方的奋斗经历,不正是因为缺乏这般执着的精神和平静的处事心态,才迟迟未取得成功吗。
我望着流淌的河水,抹平心中埋藏已久的抑郁。在北方那片流浪者的土地上,我将继续不停歇的为了目标而奋斗,平静而又顽强的面对一切困难,积极乐观的开创新的生活。
开春在即,我重新返回学校。带着故乡的小河赐予我的恩惠,登上离乡的车,一路北上。身后,故乡渐远渐渺。我回过头,轻声的呼唤,故乡,我永生永世的爱恋。
2009年春
今年春节回家,在家里找到一篇初一时写的关于家乡的作文,现在写不出以前的味道了。
家乡......
singleton模式在有限元后处理软件开发中的应用(剖面等值线)(2009-02-21 00:26:00)
摘要:
singleton模式在有限元后处理软件开发中的应用
(剖面等值线)
在三维有限元后处理软件中,客户常常会要求这样一个功能:查看三维实体的剖面等值线。例如,在高温炼炉的温度场分析中,工程师常常会关心炉内腔至炉外壁的温度变化趋势;在水坝应力分析中,设计师常常会关心断面上的局部破坏位置…..
具体来讲就是指,用户在后处理结果时,常需要一个参数输入框,用户通过输入框输入指定的平面参数,程序自动用该平面切割当前实体模型,绘制出断面上相关物理场(位移、应力等)的等值线。
针对此问题,一般软件设计时,首先会想到要建立一个平面等值线类,该类负责存储剖面的网格数据、等值线数据,以及的等值线计算、绘制等等功能。那么,初步的等值线类就设计出来了,如下:
class CContour2D
{
public:
CContour2D();
virtual ~CContour2D();
void Init();
void Calculate();
void Draw();
……
void Destory();
public:
vector<_P> m_vP; //节点向量
vector<_E> m_vE; //单元向量
public:
……
};
(单元向量中只需要能保存三角形单元和四边形单元即可,因为计算实体剖面的同时,可直接将剖面离散为三角形和四边形的网格,并算出节点的物理值。)
随后,添加剖面等值线绘制输入框,根据用户需要自动生成剖面等值线类的对象,绘制等值线。
但是这样就产生一个问题:任意时......
中国为什么做不出优秀的通用有限元软件?(2009-02-19 22:04:00)
摘要:
[请勿转载]
中国为什么做不出优秀的通用有限元软件?
北京大学袁明武教授在1997年8月《现代力学与科技进步》杂志中曾讲到这样一句话,“如果没有政策上和体制上的重大改革,在近十年内,我国计算力学软件不可能出现高质量的大型计算力学软件系统”。可见当时我国计算力学软件开发的形势有多么严峻。
而今,十二年过去了,计算力学软件市场却依旧是国外进口软件琳琅满目,国产软件寥寥无几。高校、企业做有限元分析几乎全部采用进口软件。从国外引进的ANSYS、NASTRAN、ALGOR、MRAC等等软件,价格一般都在几十万,甚至几百万,如此昂贵的价格,销量却甚好,而且国外几家大的有限元软件公司都已经陆续成功上市。而国内自主研发的JEFIX、FEPG、SAP84等等有限元程序,几乎都是靠着国内根深蒂固的人情关系在发展,关系不牢的肯定是销量惨淡。
这当中,不乏由于中国人还存在崇洋媚外的传统思想,认为:同样的软件,肯定是欧美国家做的好;同样的工程计算项目,采用进口软件来做比采用国产软件可信度更高,以至于分析人员使用进口软件的话就更好向工程单位交活。但业内人员一般都很清楚,究其主要原因,还在于质量问题上,国产软件一般通用性差,计算不稳定,而且缺乏良好的前后处理性能。
中国为什么做不出优秀的有限元软件?答案可能是综合的:技术落后、队伍缺乏、资金投入少等等。但我觉得,资金投入少才是最根本的原因。
一个完整的有限元软件包括前处理建模、有限元计算、结果图形处理三大部分,其中最核心的是有限元计算部分。一个高质量的优秀通用有限元软件的开发,首先至少需要有两名顶级的系统分析师,分别负责计算部分、前后处理部分的系统设计,其中负责计算部分的系统分析师要有10年以上的有限元程序设计、编程经验。另外需要5名软件设计师,每名软件设计师至少要配两名程序员。再加上至少3名软件测试人员。这样一支20人的开发队伍,还要连续工作至少三年才行。而目前在中国,这样的一直队伍,不敢说绝后,空前是肯定的。即便有这样一支队伍,那么维持队伍工作也需要相当大的一比的经费。假设每名系统分析师年薪30万(因为是顶级的),每名软件设计师年薪15万,每名程序员及测试人员的年薪8万,这样,不算其它成本,三年下来,光开发人员的薪水就需要700多万......
有限元节点类\单元类(手把手有限元编程)(2007-08-03 15:41:00)
摘要:本篇讨论有限元中最基本的两个类, 节点类和单元类:
节点类首先需要基本的坐标信息,还需要节点位移、荷载、约束等信息,
节点类代码如下:
#ifndef MVNODE_H
#define MVNODE_H
#include "vector"
using namespace std;
class MVNode
{
public:
MVNode();
virtual ~MVNode();
inline int GetCodeNum(int iPos) const;
inline int getDOF() const;
inline vector <double> getDispVector() const;
inline double GetX() const;
inline double GetY() const;
inline double GetZ() const;
int GetNum() const;
void SetData(int n,
double x, double y, double z, int iDOF);
void setDspVct(double displacement, int iPos);
void Init();
void Draw();
private:
int m_iNodeNum;
double m_dX,m_dY,m_dZ;
vector <double> m_dDis......