找回密码
 注册
Simdroid-非首页
查看: 1332|回复: 50

[H. 有限元编程] 开源项目Futureye:FEM有限元计算及反问题

[复制链接]
发表于 2011-8-31 07:31:30 | 显示全部楼层 |阅读模式 来自 美国
本帖最后由 nkliuyueming 于 2012-11-2 13:03 编辑

不断更新中...

2012/11/2加了几个算例,从图片自动提取计算区域进行建模计算:






2012/6/13
好久没来了,最近完成一篇关于这个软件的论文(不得不写啊,论文也很重要),等发出来了贴给大家。
论文的主要内容都来自帮助文档


2012/4/8
更新源码和帮助文档:
FuturEye3.0   

Scala语言版本: ScalaFEM0.1






2012/3/20
好久没来了,给大家汇报一下最近的情况吧,FutuEye3.0的用户手册在2.1的基础上进行了修改,增加了很多内容,不过还没写完,请稍等
另外,用Scala语言(与Java一样,都是基于JVM虚拟机的,支持面向对象和Functional编程,很适合用来开发专业领域的软件,语法可扩充)
又开发了ScalaFEM,是基于FuturEye3.0的基础上进行封装的。

下面给一个例子:求解如下问题
*   -k*\Delta{u} + c*u*v = f in \Omega
*   u=0,                     on \Gamma_D
*   d*u + k*u_n = q          on \Gamma_N
* where
*   \Omega = [-3,3]*[-3,3]
*   \Gamma_N = Right boundary
*   \Gamma_D = Other boundary
*   k = 1.0
*   c = sqrt(x^2+y^2)
*   f = -2.0*(x^2+y^2)+36.0
*   d = 1.0
*   q = 1.0

方程的弱形式在ScalaFEM中可以写成
            val laplace = new PDE
            val k = C1
            val c = sqrt(X*X+Y*Y)
            val f = -2.0*(X*X+Y*Y)+36.0
            val d = C1
            val q = C1
            laplace.integrate(LHS, Inner) {
                    (u,v) => (grad(u, "x","y") dot grad(v, "x","y")) + c*u*v
            }.integrate(LHS, Border) {
                    (u,v) => d*u*v
            }.integrate(RHS, Inner) {
                    (u,v) => f*v
            }.integrate(RHS, Border) {
                    (u,v) => q*v
            }

可以看到,已经很接近数学表达式了。完整的代码在30#楼。



开篇:
Futureye是一个用面向对象方法开发的FEM工具包。它将FEM中的“数学”理论与Java中的对象紧密关联,实现了有限元计算过程。其他类似面向对象的FEM软件几乎都是“大对象”,“粗抽象”,很难精细控制有限元形函数、单元、网格等,不利于新方法的研制和测试。Futureye目前可以求解所有FEM的基本问题以及基于PDE的反问题。现在软件代码已经超过5万多行,有兴趣的请联系我,可以共同学习、研究。 项目地址:http://code.google.com/p/futureye/
该项目为MIT授权。我的邮箱:nkliuyueming@gmail.com

上几个图:
==Plane Elastic==


==Stokes Equation==

==Benchmark of Navier-Stokes Equations==




==Numerical Optimization for Inverse Problems==


==Inverse Problem: Near-Infrared Diffusion Optical Tomography (DOT)==




评分

2

查看全部评分

 楼主| 发表于 2011-8-31 08:45:21 | 显示全部楼层 来自 美国
Simdroid开发平台
欢迎大家讨论啊,以后会写一些为什么用Java来做有限元计算的理由。
回复 不支持

使用道具 举报

发表于 2011-8-31 10:31:18 | 显示全部楼层 来自 美国
To read forty thousand lines source code is not that easy. It will take a lot of time and patience. How can you help us if some of us are really interested in this?

Can I provide you with some more numerical examples? I just want to see how is the performance of the software.

Thanks.
回复 不支持

使用道具 举报

发表于 2011-8-31 10:38:35 | 显示全部楼层 来自 日本
Two questi**:
1. Why using Java in such computatinal intensive problem?
2. How about parrallel calculation?
回复 不支持

使用道具 举报

发表于 2011-8-31 10:53:00 | 显示全部楼层 来自 浙江杭州
本帖最后由 pasuka 于 2011-8-31 10:55 编辑
hillyuan 发表于 2011-8-31 10:38
Two questi**:
1. Why using Java in such computatinal intensive problem?
2. How about parrallel calcu ...


我也对lz选择完全用java编写这样的程序匪夷所思。。。
matlab虽然很多地方都用到了java,但是也不完全是用Java写的
回复 不支持

使用道具 举报

 楼主| 发表于 2011-8-31 12:17:16 | 显示全部楼层 来自 美国
本帖最后由 nkliuyueming 于 2011-8-31 12:19 编辑
pasuka 发表于 2011-8-31 10:53
我也对lz选择完全用java编写这样的程序匪夷所思。。。
matlab虽然很多地方都用到了java,但是也不完全是 ...


首先承认Java的速度比起C/C++和Fortran要慢,但不是慢的不可接受,最多慢10%吧,关于这方面的讨论已经很多了,不赘述了。但是从Java得到的好处却很多:
1. 语法要容易,面向对象的概念要简单的多
2. 内建的垃?圾?回收机制,不用自己考虑内存管理问题,相信很多使用C++的同志都经历过delete对象出错的痛苦
3. 运行时异常与错误处理非常容易,另外自带的JStack, Jmap等命令可以在程序运行时分析程序堆栈情况,查错变得容易多了
4. 免费的集成开发环境Eclipse非常好用,例如你在写代码的时候,其中的错误已经提示出来,极大的提高程序开发效率
5. 关于并行计算,大部分并行库都有Java接口,开发起来不是问题,Futureye项目的核心也集中在单元分析与合成上,代数方程组求解已经预留了外部接口

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-8-31 12:32:42 | 显示全部楼层 来自 北京
我也觉得用java不是什么大问题,真正要考虑效率的地方可以用jni做优化。
回复 不支持

使用道具 举报

发表于 2011-8-31 12:42:00 | 显示全部楼层 来自 浙江杭州
nkliuyueming 发表于 2011-8-31 12:17
首先承认Java的速度比起C/C++和Fortran要慢,但不是慢的不可接受,最多慢10%吧,关于这方面的讨论已经很 ...

问题是:
1、搞数值计算的,用java的人相比C/C++、Fortran实在太少了;
2、用java还不如用python,更简单易用,还能方便地使用以前的C/C++、Fortran代码;
3、既然在谷歌code上建立项目,目的是众人拾柴火焰高,可是选择全部用Java编写本身就把许多人挡在门外了

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-8-31 13:13:27 | 显示全部楼层 来自 美国
pasuka 发表于 2011-8-31 12:42
问题是:
1、搞数值计算的,用java的人相比C/C++、Fortran实在太少了;
2、用java还不如用python,更简单 ...

个人认为编程语言不会成为大障碍。如果不做太大的改动的话,比着葫芦画瓢,应该够用了。
回复 不支持

使用道具 举报

 楼主| 发表于 2011-8-31 13:19:17 | 显示全部楼层 来自 美国
本帖最后由 tonnyw 于 2011-8-31 13:37 编辑
tonnyw 发表于 2011-8-31 13:13
个人认为编程语言不会成为大障碍。如果不做太大的改动的话,比着葫芦画瓢,应该够用了。 ...


是的,Java很容易学,而且想出错也不太容易

我不知道你如何感觉。我自己觉得读懂别人的有限元程序,最重要的是该有限元程序的理论说明是否详细。我看了你的手册,对于单元的理论描述还是不够详细。

回复 不支持

使用道具 举报

发表于 2011-8-31 13:43:06 | 显示全部楼层 来自 美国
这是应力场还是位移场?红圈所示处不应该应力集中的部位吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2011-8-31 13:44:39 | 显示全部楼层 来自 美国
tonnyw 发表于 2011-8-31 13:43
这是应力场还是位移场?红圈所示处不应该应力集中的部位吗?

It seems like you have h-adaptivity. Do you have p-adaptivity?  
回复 不支持

使用道具 举报

发表于 2011-8-31 14:17:38 | 显示全部楼层 来自 浙江杭州
tonnyw 发表于 2011-8-31 13:13
个人认为编程语言不会成为大障碍。如果不做太大的改动的话,比着葫芦画瓢,应该够用了。 ...

如果只是使用者的话,确实没有大问题
不过要作为开发者增加新的代码或者单元,实现某种算法就必须得看懂那部分对应的Java代码,就不知道java插入C/C++代码是否像python代码中插入C/C++那样方便呢?
回复 不支持

使用道具 举报

发表于 2011-8-31 14:47:49 | 显示全部楼层 来自 湖南长沙
   很有兴趣,但不会Java啊,C++或者Fortran就好了
回复 不支持

使用道具 举报

发表于 2011-8-31 16:06:11 | 显示全部楼层 来自 日本
本帖最后由 hillyuan 于 2011-8-31 16:17 编辑
nkliuyueming 发表于 2011-8-31 12:17
首先承认Java的速度比起C/C++和Fortran要慢,但不是慢的不可接受,最多慢10%吧,关于这方面的讨论已经很 ...


1. Java is not the only Object-oriented language. Simpler is not always the better.
2. You can use, e.g., smart poiniter in C++
4. Most language, including Fortran C++, could use Eclipse
5. If you don't c-**ider parrallel computation at the stage of your software design, It would be a BIG problem.

I havn't compared Java with C etc myself, but 10% slower is a vital factor for user to choose a software. Anyway, I don't believe your problem would just 10% slow! For example, I see you build your own blas and lapack library. As my experience, a good blas library, such as GOTOBlas, should be several times fast than those of not optimazed ones.

点评

超赞  发表于 2011-10-9 23:42

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-9-1 08:42:42 | 显示全部楼层 来自 美国
tonnyw 发表于 2011-8-31 13:43
这是应力场还是位移场?红圈所示处不应该应力集中的部位吗?

这个是位移场,等值线是位移场的y分量
回复 不支持

使用道具 举报

 楼主| 发表于 2011-9-1 08:43:49 | 显示全部楼层 来自 美国
pasuka 发表于 2011-8-31 14:17
如果只是使用者的话,确实没有大问题
不过要作为开发者增加新的代码或者单元,实现某种算法就必须得看懂 ...

不行,需要调用JNI使用本地方法
回复 不支持

使用道具 举报

 楼主| 发表于 2011-9-1 08:53:02 | 显示全部楼层 来自 美国
本帖最后由 nkliuyueming 于 2011-9-2 01:43 编辑
hillyuan 发表于 2011-8-31 16:06
1. Java is not the only Object-oriented language. Simpler is not always the better.
2. You can use ...

你说的对,不过十全十美的东西很难找,我只是想发掘优势,弥补不足。
回复 不支持

使用道具 举报

 楼主| 发表于 2011-9-1 08:54:07 | 显示全部楼层 来自 美国
tonnyw 发表于 2011-8-31 13:44
It seems like you have h-adaptivity. Do you have p-adaptivity?

Only h-adaptivity examples now, but p-adaptivity is possible.
回复 不支持

使用道具 举报

发表于 2011-9-1 10:34:04 | 显示全部楼层 来自 江苏南京
感觉如果说用JAVA最大的好处,感觉应该是可以跨平台吧,而且还可以分布式计算,虽然在目前实现的难度还是很大,可是也是一个很好的扩展性考虑不是?不过感觉原来编软件的时候,JAVA最大的限制还是在IDE工具上,Eclipse也好,JBuider也罢,和VS一比简直。。。当然,这个也可以不算,毕竟做有限元编程很多人还在用VC++6.0,所以,总体来说,支持一下楼主!请教一下,楼主你用Eclipse的时候用CVS吗?这个我从3.2开始调,一直不是很好用,估计会对异地代码开发有影响吧?

评分

1

查看全部评分

回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-5-11 12:25 , Processed in 0.048964 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表