nkliuyueming 发表于 2011-8-31 07:31:30

开源项目Futureye:FEM有限元计算及反问题

本帖最后由 nkliuyueming 于 2012-11-2 13:03 编辑

不断更新中...

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

https://lh4.googleusercontent.com/-9keZTkOsMtM/UH9wUFbAILI/AAAAAAAAAvI/C7sMgqNQjNE/w484-h224-n-k/car1-1.pnghttps://lh3.googleusercontent.com/-aniDC0jfDCw/UH9wUFUXuHI/AAAAAAAAAvE/n8PnktxrNqE/w484-h224-n-k/car1-2.png
https://lh3.googleusercontent.com/-GbwXVit_TlM/UH9wURc60TI/AAAAAAAAAvM/loMT-rXAxP8/w593-h273-n-k/hand1-1.pnghttps://lh6.googleusercontent.com/-0n5nOmbANv0/UH9wVKoOtrI/AAAAAAAAAvc/clPAbAe2HBw/w654-h302-n-k/hand1-3.pnghttps://lh4.googleusercontent.com/-VRmMoET0F_I/UH9wUrsmoDI/AAAAAAAAAvU/iGaeRwMfYB4/w594-h273-n-k/hand1-2.png


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==

https://lh4.googleusercontent.com/-6BKnBWr-xUQ/TsaxTCHVeMI/AAAAAAAAAr4/LZeaDSZ_V_E/s288/elasticDamInit.pnghttps://lh3.googleusercontent.com/-CGqi7mLpOeo/TsaxTPkESVI/AAAAAAAAArk/K3mf8ixVBuU/s288/elasticDamRlt.pnghttps://lh6.googleusercontent.com/-gvjWG6MvFXc/TsaxTIsLuQI/AAAAAAAAAro/8Cze5IQ2lf8/s288/elasticHoleInit.pnghttps://lh6.googleusercontent.com/-IlcKQ47l-0A/TsaxThv5QsI/AAAAAAAAAr0/gUdNXBk9x_U/s288/elasticHoleRlt.png
==Stokes Equation==
https://lh4.googleusercontent.com/_Cil2MFH7iLM/TYV8o-ST-RI/AAAAAAAAAF4/djcZzGrJ2Fc/s288/cylinder4.pnghttps://lh3.googleusercontent.com/_Cil2MFH7iLM/TbpB8RvD_iI/AAAAAAAAAH0/n0YXrevRCoc/s288/box.png
==Benchmark of Navier-Stokes Equations==
https://lh3.googleusercontent.com/-1dVIzXpwgac/TsafQjWW3WI/AAAAAAAAAqY/7qRiEKDEmcA/s400/NS1.pnghttps://lh3.googleusercontent.com/-flx640NVIf4/TsafQQUHOZI/AAAAAAAAAqQ/Y2zq_GU57gQ/s400/NS2.png
https://lh5.googleusercontent.com/--kWi6uDzZbY/TsafPwE_63I/AAAAAAAAAqA/W3XSIDxyFkk/s400/NS3.pnghttps://lh3.googleusercontent.com/-smYdom1bckU/TsafQFfkKVI/AAAAAAAAAqI/1xJK6MY5Kec/s400/NS4.png
https://lh5.googleusercontent.com/-MgfdT9KqmRI/Tsah4Xd15WI/AAAAAAAAAq0/D32uVqKnmTo/s288/NSBox.png

==Numerical Optimization for Inverse Problems==
https://lh4.googleusercontent.com/-MsgxFIrber8/T-HaVnasgxI/AAAAAAAAAt4/oeGSx-y1L_U/s800/Language1.png

==Inverse Problem: Near-Infrared Diffusion Optical Tomography (DOT)==
https://lh3.googleusercontent.com/-R98pYWlTVRE/TsavryY5GnI/AAAAAAAAArQ/iIam-vbDVQc/s288/DOT1.pnghttps://lh5.googleusercontent.com/-QTCz_HJtGQY/Tsavroh0U7I/AAAAAAAAArA/GlEzcMR7-9U/s288/DOT2.pnghttps://lh4.googleusercontent.com/-XFbSayVIEi4/Tsavrp2P3FI/AAAAAAAAArE/74SF44b7nFE/s288/DOT3.pnghttps://lh4.googleusercontent.com/-4OgNXhubj7Q/TsavsB1Nb7I/AAAAAAAAArY/Pgc8d6oQd-s/s288/DOT4.png



nkliuyueming 发表于 2011-8-31 08:45:21

欢迎大家讨论啊,以后会写一些为什么用Java来做有限元计算的理由。

tonnyw 发表于 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.

hillyuan 发表于 2011-8-31 10:38:35

Two questi**:
1. Why using Java in such computatinal intensive problem?
2. How about parrallel calculation?

pasuka 发表于 2011-8-31 10:53:00

本帖最后由 pasuka 于 2011-8-31 10:55 编辑

hillyuan 发表于 2011-8-31 10:38 static/image/common/back.gif
Two questi**:
1. Why using Java in such computatinal intensive problem?
2. How about parrallel calcu ...

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

nkliuyueming 发表于 2011-8-31 12:17:16

本帖最后由 nkliuyueming 于 2011-8-31 12:19 编辑

pasuka 发表于 2011-8-31 10:53 static/image/common/back.gif
我也对lz选择完全用java编写这样的程序匪夷所思。。。
matlab虽然很多地方都用到了java,但是也不完全是 ...

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

chentao807 发表于 2011-8-31 12:32:42

我也觉得用java不是什么大问题,真正要考虑效率的地方可以用jni做优化。

pasuka 发表于 2011-8-31 12:42:00

nkliuyueming 发表于 2011-8-31 12:17 static/image/common/back.gif
首先承认Java的速度比起C/C++和Fortran要慢,但不是慢的不可接受,最多慢10%吧,关于这方面的讨论已经很 ...

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

tonnyw 发表于 2011-8-31 13:13:27

pasuka 发表于 2011-8-31 12:42 static/image/common/back.gif
问题是:
1、搞数值计算的,用java的人相比C/C++、Fortran实在太少了;
2、用java还不如用python,更简单 ...

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

nkliuyueming 发表于 2011-8-31 13:19:17

本帖最后由 tonnyw 于 2011-8-31 13:37 编辑

tonnyw 发表于 2011-8-31 13:13 static/image/common/back.gif
个人认为编程语言不会成为大障碍。如果不做太大的改动的话,比着葫芦画瓢,应该够用了。 ...

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

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

tonnyw 发表于 2011-8-31 13:43:06

这是应力场还是位移场?红圈所示处不应该应力集中的部位吗?

tonnyw 发表于 2011-8-31 13:44:39

tonnyw 发表于 2011-8-31 13:43 static/image/common/back.gif
这是应力场还是位移场?红圈所示处不应该应力集中的部位吗?

It seems like you have h-adaptivity. Do you have p-adaptivity?

pasuka 发表于 2011-8-31 14:17:38

tonnyw 发表于 2011-8-31 13:13 static/image/common/back.gif
个人认为编程语言不会成为大障碍。如果不做太大的改动的话,比着葫芦画瓢,应该够用了。 ...

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

玄石 发表于 2011-8-31 14:47:49

   很有兴趣,但不会Java啊,C++或者Fortran就好了

hillyuan 发表于 2011-8-31 16:06:11

本帖最后由 hillyuan 于 2011-8-31 16:17 编辑

nkliuyueming 发表于 2011-8-31 12:17 static/image/common/back.gif
首先承认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.

nkliuyueming 发表于 2011-9-1 08:42:42

tonnyw 发表于 2011-8-31 13:43 static/image/common/back.gif
这是应力场还是位移场?红圈所示处不应该应力集中的部位吗?

这个是位移场,等值线是位移场的y分量

nkliuyueming 发表于 2011-9-1 08:43:49

pasuka 发表于 2011-8-31 14:17 static/image/common/back.gif
如果只是使用者的话,确实没有大问题
不过要作为开发者增加新的代码或者单元,实现某种算法就必须得看懂 ...

不行,需要调用JNI使用本地方法

nkliuyueming 发表于 2011-9-1 08:53:02

本帖最后由 nkliuyueming 于 2011-9-2 01:43 编辑

hillyuan 发表于 2011-8-31 16:06 static/image/common/back.gif
1. Java is not the only Object-oriented language. Simpler is not always the better.
2. You can use ...
你说的对,不过十全十美的东西很难找,我只是想发掘优势,弥补不足。

nkliuyueming 发表于 2011-9-1 08:54:07

tonnyw 发表于 2011-8-31 13:44 static/image/common/back.gif
It seems like you have h-adaptivity. Do you have p-adaptivity?

Only h-adaptivity examples now, but p-adaptivity is possible.

colinmi 发表于 2011-9-1 10:34:04

感觉如果说用JAVA最大的好处,感觉应该是可以跨平台吧,而且还可以分布式计算,虽然在目前实现的难度还是很大,可是也是一个很好的扩展性考虑不是?不过感觉原来编软件的时候,JAVA最大的限制还是在IDE工具上,Eclipse也好,JBuider也罢,和VS一比简直。。。当然,这个也可以不算,毕竟做有限元编程很多人还在用VC++6.0,所以,总体来说,支持一下楼主!请教一下,楼主你用Eclipse的时候用CVS吗?这个我从3.2开始调,一直不是很好用,估计会对异地代码开发有影响吧?
页: [1] 2 3
查看完整版本: 开源项目Futureye:FEM有限元计算及反问题