alvaro 发表于 2007-7-17 17:11

FlexPDE求解一阶微分方程和非线性方程实例

用FlexPDE做一阶微分方程

选择一阶微分方程:             dH/dt = a - b*H
化解之后得到精确解:             H(t) = H(0)*exp(-b*t) + (a/b)*



在FlexPDE中根据精确解输入代码:

title
"FIRST ORDER ORDINARY DIFFERENTIAL EQUATION"

select
ngrid=1                     { Since no spatial information is required,
                                  use the minimum grid }
errlim = 1e-4

variables
Height(threshold=1)         { declare Height to be the system variable }

definitions
a = 2                         { define the equation parameters }
b = 0.1
H0 = 100
                              { define the exact solution: }
Hexact = H0*exp(-b*t) + (a/b)*(1-exp(-b*t))

initial values
Height = H0

equations
dt(Height)= a - b*Height    { The ODE }

boundaries
region 1
start (0,0)
line to (1,0) to (1,1) to (0,1) to close

time 0 to 100

plots
for time = 0,1,10,100
                              { Plot the solution: }
history(Height) at (0.5,0.5)
                              { Plot the error check: }
history((Height-Hexact)/Hexact) at (0.5,0.5) as "Relative Error"

end    235251124



FlexPDE求解非线性方程


选择黏性流中的一个方城:          dH/dt = a - b*sqrt(H)
         解析解满足关系式:          sqrt(H0) + (a/b)ln - sqrt(H) - (a/b)ln = (b/2)*t


在FlexPDE中根据关系式输入代码(具体代码如下):


title
"NONLINEAR FIRST ORDER ORDINARY DIFFERENTIAL EQUATION"

select
ngrid=1               { Since there is no spatial information required,
                        use the minimum grid size }

variables
Height(threshold=1)   { declare Height to be the system variable }

definitions
a = 2               { define the equation parameters }
b = 0.1
H0 = 100
                        { define the accuracy check }
T0 = sqrt(H0) + (a/b)*ln(a-b*sqrt(H0))
Tcheck = sqrt(Height) + (a/b)*ln(a-b*sqrt(Height))

initial values
Height = H0

equations
dt(Height)= a - b*sqrt(Height)    { The ODE }

boundaries
region 1            { define a fictitious spatial domain }
    start (0,0)
    line to (1,0) to (1,1) to (0,1) to close

time 0 to 1000          { define the time range }

histories
                        { Plot the solution: }
history(Height) at (0.5,0.5)
                        { Plot the accuracy check: }
history(/[(b/2)*t]) at (0.5,0.5)
                as "Relative Error"

end    141854607

附件为非线性方程的结果图。


申请FlexPDE免费试用光盘请登入中国科研软件网(www.SoftSale.cn)
您也可以在中国科研软件论坛(forum.SoftSale.cn)获得更多关于FlexPDE的资料

http://forum.softsale.cn/attachments/month_0707/20070717_ae02716ca81ead5f57b2Bj2EpTrRvGrY.jpg

[ 本帖最后由 alvaro 于 2007-7-17 17:12 编辑 ]

无水1324 发表于 2007-7-17 17:24

国产的还是?

octopussheng 发表于 2007-7-17 21:09

以前没有听过这个软件!楼主详细介绍一下吧

alvaro 发表于 2007-7-18 10:31

FlexPDE的多平台适应性
现在无论是Unix,Linux和Mac的用户都可以像Windows的用户那样享受FlexPDE强大和便捷了。

Heatflow(热流问题)
这个问题描述一个木片的横断面部分,分析通过该结构时的热量损失。它由十七个具有不同传导性的不同区域构成。内部和外部之间的温度差异相差70度。

Tension(张力问题)
这个问题是说一个被拉紧的有孔的横木的变形性。FlexPDE要解决两个同时发生在横木的x和y方向位移的偏微分方程
dx(Sx) + dy(Txy) + Fx = 0
dx(Txy) + dy(Sy) + Fy = 0
Sx和Sy 是X和Y方向上的压力, Txy 是切应力, Fx和 Fy 是X和Y方向上的质量力.
Sx = C11*dx(U) + C12*dy(V) + C13*
Sy = C12*dx(U) + C22*dy(V) + C23*
Txy = C13*dx(U) + C23*dy(V) + C33*
Cnn 是物质构成关系

二维孔道中的滞留
这个问题是说检查二维孔道中的粘性流动. 利用作用在通道的末端固定压,FlexPDE解出了液体的X和Y方向上的速度.这个问题的雷诺氏数接近20
在笛卡尔二维上不可压缩液体的Navier-Stokes方程
rho* = mu*div(grad(U)) - dx(P)
rho* = mu*div(grad(V)) - dy(P)
还有连续性方程
dx(U) + dy(V) = 0.
这里U和V是X和Y方向上的速度,P是压力,rho是密度,mu是粘度

Chemical Reactions(化学反应)
这个问题涉及到当空气过管道时,在空心管化学容器中气体的横断面.化学反应有个反应速率,与温度是指数关系,一旦到达点火温度爆炸反应就会完成.管的两端都有加热带,帮助诱导点火.我们模拟圆形横断面的四分之一.同时会发生两个PDE,一个是对温度,一个是对化学物质的浓度
dt(T) = div(grad(T)) + a*(1-C)*exp(G-G/T)
dt(C) = div(grad(C)) + b*(1-C)*exp(G-G/T)
其中T是温度,C是浓度.a,b,和G是常数

Permanent Magnet(永久磁铁)
这个问题涉及到一个含有永久磁铁的磁心的磁场问题
系统遵守PDE
curl(curl(A)-P)/mu) + J = 0
这里A是磁场矢量势,P是磁化,J是电流密度,mu是通透性

Diffusion(扩散)
这个问题涉及到搀杂剂从稳定的遮蔽源热扩散进入固体,参数就选择那些在半导体扩散中经常遇到的参数.PDE就是扩散方程
dt(C) = div(D*grad(C))
C是浓度,D是扩散系数,早期,接近源头的溶解可以类比成一维扩散中分析的溶解

中国科研软件论坛(forum.Softsale.cn)
中国科研软件网(www.SoftSale.cn)

咕噜噜 发表于 2007-7-18 10:33

那个公司开发的啊,感觉对场问题比较多

alvaro 发表于 2007-7-18 10:34

FlexPDE是什么?
FlexPDE是一个“脚本的有限要素模型建立工具和数字的处理器”。由此我们将其解释为由用户书写的脚本。FlexPDE执行必要的操作来将一个偏微分方程组的描述转变成成为一个有限的要素模型,求解方程组并将结果以图片形式输出。
FlexPDE也是一个“问题处理环境”,因为它可以执行用于求解部分微分方程组的全部必要函数:原始脚本编辑器,建立有限元素网的网格生成器,用以求解的有限元素处理器以及一个将结果分类的绘图系统。
FlexPDE没有默认的问题领域及方程列表,微分方程式的选择完全由用户决定。
脚本语言允许用户在描述他的微分方程组和主要问题的几何图形时所采用的数学方式就像他对他的合作者描述时所采用的方式一样。
例如,以下是一个脚本中的一个方程式部分,这里拉普拉斯的方程被表示为
Div(grad(u)) = 0.
类似的,在脚本中还有一个界限部分,这里主要的二维空间问题的几何界限被近似表示为环绕周长行走。
Start(x1,y1) line to (x2,y1) to (x2,y2) to (x1,y2) to finish
这个脚本形式有很多优点
         脚本彻底描述了方程组和主要问题,所以对于正在求解的方程组就没有了不确定   性,因为或许这个例子带有固定的应用程序。
         新的变量,新的方程或新的条件可以随意填加,所以软件可以表达任何不同的缺失条件,或是任何一个自然影响
         许多不同问题可以用同一软件求解,用户不必为了解决新问题而学习新软件的使用。

脚本模型的推论结果
         用户需要能够将他的问题用数学形式表达
在教育环境中它很不错,正是学生需要学习的类型。
而在工业环境中,它有可能成为障碍。但是一个知识渊博的用户可以做出能够由经过较少训练的工人使用和修改的脚本。而且应用脚本库可以展示如何操作。

FlexPDE能做什么?
         FlexPDE能够在笛卡尔或轴对称二维几何空间或三维笛卡尔几何空间中求解一阶或二阶微分方程。
         方程组可以使稳态的也可以是时间依赖性的,或者FlexPDE也可以有选择的求解特征值问题。在同一问题中不变方程和时间依赖性的方程可以混合。
         FlexPDE可以求解任意数量的联立方程,数量取决于运行FlexPDE的计算机的局限。
         方程可以是线性或非线性的,非线性系统通过应用一个修改过的Newton-Raphson叠代法来求解.
         任意数量不同物质的属性的部位都可被限定.模拟变量被假定是连续的闯过物质的界面。跳过了从PDE系统的声明所派生出的条件。
提示:
    FlexPDE使用起来极为方便,这使得它在教学应用中非常受欢迎。但是FlexPDE不是玩具,全面的掌握了它的功能,您可以将其成功的运用在复杂问题的解决过程中。


中国科研软件网(www.SoftSale.cn)
中国科研软件论坛(forum.SoftSale.cn)

alvaro 发表于 2007-7-18 10:36

它如何运作?
FlexPDE是一个完全整合的PDE处理器,带有多种模型以提供全方位问题解决系统。
         一个编辑模型的脚本提供简易文本编辑和主要图形预览。
         一个符号等式分析器扩展了定义参数及联系的界限,执行三维求导,抽象应用部分积分法减少建立Galerkin抽象等式的二次步骤。之后将这些等式用雅可比耦连矩阵加以微分。
         一个网格生成模块在任意二维问题之上构造了三角有限单元网。在三维问题中,二维网格被挤压成在突出维数中覆盖任意数量非平面层的四面体网。
         一个有限元数据分析模块采用特别的步骤,为每一个线性或非线性系统中的稳态问题,时间依赖性问题或特征值问题选择合适的解决方案。有限元的基础可以是二次也可以是三次的。
         当错误很严重的时候,一个误差估计程序会测量网格的适合性并且对网格进行改善。这个系统会一直重复这种针对网格的精炼及处理,直到达到用户所能忍受的误差度。
         一个绘图输出模块支持解法和图中的任意代数函数,如等高线,表面,矢量或角度图。
         一个数据输出模块可以以各种模式书写文档报告,包括简单表格,全有限元网数据,CDF或TecPlot兼容。

谁能够使用FlexPDE?
多数的物理和工程在某种程度上可以被描述成为部分微分方程,这也就意味着像FlexPDE一样的脚本解算器几乎可以被应用于任意的工程或科学领域。
         许多领域的学者都可以使用FlexPDE来将他们的试验或设备建模,进行不同影响重要性的预测或检验。参数的变化或从属性并不会被表格库所限,可以随意规划。
      工程师可以使用FlexPDE来设计最优化研究,适合度研究以及概念分析。它也可以把一个设计的各个方面建模,而不用针对每种影响选择一种单独的工具。
         应用软件开发者可以将FlexPDE作为需要有限元微分方程组建模的特殊目的应用核心。
         教育家可以使用FlexPDE来教授物理或工程学。这个软件工具可以被应用于某一学科系统的全范围检验。学生们可以看见实际的方程式,而且可以通过调整术语或域来实现互动的操作。

脚本是什么样子的
问题描述脚本是一个易读的文本文档。文件内容由许多部分组成,每一部分都由标题来鉴别。最常用的部分是:
         TITLE-用于输出的描述标签项
         SELECT-使用者对FlexPDE默认工具的控制项
         VARIABLES-依赖变量
         DEFINITIONS-有用参数,关系及函数定义
         EQUATIONS-每一个变量都与一个微分方程相联系
         INTIALVSLUES-非线性或时间依赖性问题初始值
         BOUNDARIES-通过丈量范围周长,将线和弧连起以确定形状来描述几何学
         PLOTS-列出所需的绘图输出。可能是周线,表面,高线及矢量分块的组合。

一个简单的二次扩散方程可以如下所示:
A simple diffusion equation on a square might look like this:TITLE 'Simple diffusion equation'
VARIABLES   
   u
DEFINITIONS
   k=3
EQUATIONS
   div(k*grad(u))=0
BOUNDARIES
   region 1
   start(0,0) line to (1,0) to (1,1) to (0,1) to finish
PLOTS
   contour(u)
   vector(k*grad(u))
END
提示:其他选项部分及详细规则在FlexPDE问题描述相关章节“section”中介绍

alvaro 发表于 2007-7-18 10:38

限制条件是什么?
正确的限制条件规范对于PDE系统的解法至关重要
在一个FlexPDE脚本中,限制条件被表示成为行走的边界
原始的限制条件类型是VALUEHE和NATURAL
VALUE边界条件指定为必须在区域边界内变化的数值。
NATURAL边界条件限制为一个区域边界内的通量。(NATURAL边界条件的精确含义取决于边界条件所确定的PDE,详细情况在“natural boundary conditions”章节中有所说明)
例如,在上面提到的的扩散问题中,我们在底部和顶部边缘增加固定数值,以及零通量条件,如下所示:
BOUNDARIES
   region 1
   start(0,0)
   value(u) = 0    line to (1,0)       { fixed value on bottom }
   natural(u)=0   line to (1,1)       { insulated right side }
   value(u)=1   line to (0,1)       { fixed value on top }
   natural(u)=0   line to finish      { insulated left side }


怎样提出我的问题?
FlexPDE可以阅读用可读性语言来描述的,关于待解决问题特性的文本脚本。在简单应用中,脚本将非常简单,而复杂的应用则可能要求对FlexPDE功能的更多了解。在下面的讨论中,我们将从FlexPDE的简单特征开始,随着我们的进程逐步深入到更加复杂的特性中。
FlexPDE拥有一个内置的编辑器,通过它您可以建立您的问题脚本。您可以编辑脚本并运行,然后再编辑再运行直到您得到您所需要的结果。您可以保存脚本以备将来使用或者将其作为今后修改的基础。
开始一个问题设置的最简单办法就是复制一个已经存在的相似的问题。
但是也有其他的办法,定义四个基础部分:
         定义变量及方程式
         定义域
         定义具体的参数
         制定图片输出
这些步骤在以下几个部分将会加以描述。我们将应用一个简单的二维热流问题来作为实例,通过运用FlexPDE中的最基本元素来建立脚本。在接下来的部分,我们将把脚本加以完善,以改进的方式把FlexPDE更强大的能力加入其中。三维应用强烈的依赖于二维概念,我们将在一个单独的章节中进行阐述。
接下来我们将不会着力于全面阐述全部有用的选项,而是通过说明最常用的窗体来使用户清楚软件的概念。在FlexPDE的说明书中将会包含全部选项的详细描述。某些选项也可能会在以后的章节中有所介绍。

问题设置指导
在为FlexPDE陈述问题时,以下有一些应该遵守的指导规则。
         起始于物理系统的基本综述,基本守恒原理的表达常常比频繁出现在教科书中的沉重的数据处理仿真“简化”要更好操作。
         起始于一个简单的模型,可能一个你已知道答案的问题更适宜。这样你既可以检验你对于的问题陈述是否正确,又可以增加您对于FlexPDE可靠性的信心。(一个有效的方法是假定一个解析答案,将其插入PDE来生成得出计算结果所必须的源条目。确定已经将合适的边界条件考虑其中)
         开始的时候不必担心非线性系数或具体特性的精确形式。尝试求解一个简单问题,然后添加其他复杂条件。
         制订出范围。首先描绘出外部界限,将边界条件定位为您所需要的。然后覆盖其他具体区域,之后的区域将会覆盖或取代其下面的区域,这样你就不用重复很多复杂的界面。
         详细说明在求解过程中可能会有所帮助的任何事情。不要只是将您所需要的结果进行区分然后不知道为什么会发生错误。抓住反馈。

符号
大多数情况下,FlexPDE中的符号像在程序设计语言中的符号一样都是简单的文本用法。
         微分可以通过dx()形式来表示,所有的同等命名都可以被识别,如二级衍生符号dxx(),向量操作:div,grad,curl等。
         命名不分大小写,F和f相同。

变量和方程式
FlexPDE需要知道的两个主要的信息是:您要分析的变量是什么,定义他们的偏微分方程是什么。
问题脚本的VARIABLES和EQUATIONS部分提供这些信息。二者是紧密相关的,所以对于每个变量都必须有一个对应的方程。
在简单问题中,您可能只有一个变量,如电压或温度。此时,您可以简单的将变量和方程式声明为:

VARIABLES
   Phi

EQUATIONS

    Div(grad(phi))+S=0

在更加复杂的情况下,可能会出现多个变量和方程。FlexPDE需要知道如何把方程同变量关联起来,因为构建模型时的一些细节需要依靠这些联系。
变量和方程相联系的最简单的方式是按照顺序:

    VARIABLES
      A,B
   EQUATIONS
      Div(grad(A)) + B = 0
      Div(grad(B)) + A = 0
第一个等式被假设成是用来定义所列的第一个变量的,依此类推。

事实上更清楚的方式是标记出每个方程以及其定义的变量:

    EQUATIONS
   A:Div(grad(A)) + B = 0
   B:Div(grad(B)) + A = 0

绘制范围
问题的范围在BOUNDARIES部分中描述了,由REGIONS组成,每一个都被假定为具有唯一的具体特性。一个REGION可能包含许多闭合的循环或岛,但是它们被假定为属于同一种特性。
         一个REGION的详述从声明REGION<number >开始,头文件后的所有的循环都包含在这个部分。
         后面的REGIONS覆盖前面的REGIONS
         REGION可以命名,如REGION<number>“Name”形式
         REGION 1应该包含全部区域

Region的形状被描述成为绕着周界行走,从一个接点到另一个LINE或ARC部分。每一个部分都假定它与前面部分的终点相连的,而START语句使事件滚动。您可以使用FINISH来使某部分归回起点。
         矩形区域由四条线组成:
START(x1,y1) LINE TO(x2,y1) TO (x2,y2) TO (x1,y2) TO FINISH
(当然,任意四边形都是具有同样的构造,所改变的仅仅是坐标而已。任意多边形都可以通过增加点来构建)
         弧可以用多种方法创建,最简单的一种是通过描述原点和角度来完成:
START(r,0) ARC(CENTER=0,0) ANGLE=360
         弧也可以通过详细说明原点和终点来说明:
START(r,0) ARC(CENTER=0,0) TO (0,r)   { a 90 degree arc }
(如果原点和起点的距离不等于原点和终点的距离,那么您将建立一个椭圆弧)
         环可以被命名为STARE“Name”(…)

那么BOUNDARIES部分的原型将是:
BOUNDARIES
REGION 1
<closed loops around the domain>
REGION 2
<closed loops around overlays of the second material>

您可以一次创建区域的一部分,使用“domain”菜单按钮来预览您目前为止所创建的图样。
“save”和“save as”菜单按钮允许您在工作中随时保存您的工作,以防万一。

一个问题的例子
让我们建立一个包含在两个平面之间的圆形的作为范例。我们将简单的将平面处理为正方形的上下面,圆在其间居中。使用以上的声明,增加所需的控制标签,我们得到:
BOUNDARIES
    REGION 1   'box'   { the bounding box }
      START(-1,-1) LINE TO(1,-1) TO (1,1) TO (-1,1) TO FINISH
REGION 2   'blob'   { the embedded circular 'blob' }
START 'ring' (1/2,0) ARC(CENTER=0,0) ANGLE=360 TO FINISH

提示:建立区域边界的详细规则在相关章节"Sections | Boundaries"有所介绍。

建立一个网
当您选择“run”按钮时,FlexPDE将会开始自动创建有限元素网以适合您所描述的区域,在自动产生的网中,单元的大小将由区域边界中的外部点间的空间决定,或者由弧的曲率决定。
在我们的实例中,自动完如下所示:
图…
注意区域2的圆形边界被绘制成单元支架。

这里有几个可以让用户用来改变自动生成的网的控制按钮。在“控制网的密度”一章的相关部分有详细介绍。
作为范例,我们可以通过使用修改器NODE_SPACING来将区域2的圆形区域的网格设得更加密集:
NODE_SPACING:
REGION 2 'blob'{ the embedded 'blob' }
      START(1/2,0)
       NODE_SPACING = 0.05
       ARC(CENTER=0,0) ANGLE=360 TO FINISH

产生的网如下图

图…..
多数情况下,干涉网的生成并不必要,因为就像我们将要看到的一样,一旦FlexPDE在解法中察觉到有明显曲率就会适度的调整网。

定义具体参数
多数实际问题的复杂度都来源于一个事实,在微分方程组中的系数在会随着构成结构的物质不同而有不同的值。
在FlexPDE中有两个简单的方法解决了问题。首先,物质参数是被命名的而且默认值已经在DEFINITIONS部分中给出,其次,物质参数也已经在所限制区域中被赋值。
到目前为止,无论测试问题是热能流动问题还是静电问题或者其他方面的问题,影响并不明显。尽管如此,为了在以下的讨论中更加具体,让我们来假定它是一个热量问题,描述的是一个埋入导体的绝缘体,导体位于热源之间。我们给绝缘体一个0.001的传导率,设定周围的导体的传导率为1。

首先,我们定义常数的名称并在定义区间赋予其默认数值:
DEFINITION
K=1
现在让我们将常量代入方程式
EQUATIONS
Div(-k*grad(phi)) = S
之后我们来详细说明一下区域2的区域值:

REGION 2'blob'{ the embedded blob }
   K=0.001
          START(1/2,0) ARC(CENTER=0,0) ANGLE=360 TO FINISH

[提示:为了表达清晰,我们也可以在区域1中将导体的传导率定义为1]

设置边界条件
边界条件被指定为区域中沿周长移动的修改器。
边界条件的主要类型为VALUE和NATURAL
VALUE边界条件设定了值,即变量必须取在区域边界上。
NATURAL边界条件设定了区域边界的通量。通过laplace方程,NATURAL边界条件与neumann或者正常的派生边界条件是等价的。
[提示:NATURAL边界条件的精确含义取决于已设的边界条件的PDE]

每一个边界条件的声明都是变量命名的理由。这些命名将边界条件和所列方程式之一相关连,因为实际上方程式是由边界条件而调控的的。例如,被VALUE(u)=0修改的方程式,原来就是由定义u决定的。NATURAL(u)=0将取决于定义u的方程的形式的含义。
在我们的范例中。假定我们希望将底边定义为零温度系数,绝缘边界在右侧,温度1度为顶边,绝缘边界在左侧。命令如下

REGION 1'box'{ the bounding box }

START(-1,-1)
VALUE(Phi)=0   LINE TO(1,-1)    { Phi=0 in base line }
NATURAL(Phi)=0   LINE TO (1,1)    { normal derivative =0 on right side }
VALUE(Phi)=1   LINE TO (-1,1)    { Phi = 1 on top }
NATURAL(Phi)   LINE TO FINISH   { normal derivative =0 on left side }
注意VALUE或NATURAL的声明指出了将被应用于接下来的边界区域的条件,这一条件要一直应用直至陈述改变。
另外还要注意区域的形状(线或弧)在边界条件改变后将要重新设置。
[提示:其他的边界条件形式也可以被允许,参照“Sections|Boundaries”]

请求绘图输出
PLOTS部分包括绘图输出请求。FlexPDE认可四种主要绘图形式:
CONTOUR-一个自变量等高线图,可以被涂色
SURFACE-一个自变量的三维表面
VECTOR-箭头区域
ELEVATION-沿着定义路径的输出


您可以请求生产任何数量的图,图的值可以是变量,坐标以及定义参数等任意相容的代数结合。
在范例中,我们将请求一个温度等高线,一个热流矢量图,k阶grad,温度沿着中心线的正面图以及一滴水表面的常态热流的正面图:
PLOTS
CONTOUR(Phi)
VECTOR(-k*grad(Phi))
ELEVATION(Phi) FROM (0,-1) to (0,1)
ELEVATION(Normal(-k*grad(Phi))) ON 'ring'
当FlexPDE完成求解和插入网格的过程后,PLOTS部分中的输出请求就会被完成,而且满足所有的单元都在误差范围内。同PLOTS部分的形式一样但是被命名为MONITORS的部分,将在更加频繁间隔内完成暂时输出,这些输出将作为一个求解过程中的即时报告。
所有的关于PLOTS的纪录在以PG3为后缀的文件和以PDE为后缀的脚本文件中有所记载。这些记录了的部分可以通过调用FlexPDE主菜单中的VIEW项来观看。MONITORS并未记录在.PG3文件中。

[提示:FlexPDE接受其他格式的命令,包括GRID和HISTORIES分区。查看相关章节“Sections | Monitors and Plots”]

将全部汇总
在前面的部分中,我们已经逐渐建立起了一个问题规范。
汇总起来如下:
TITLE 'Heat flow around an Insulating blob'
VARIABLES
Phi    { the temperature }
DEFINITIONS
K = 1   { default conductivity }
R = 0.5   { blob radius }
EQUATIONS

Div(-k*grad(phi)) = 0
BOUNDARIES
REGION 1 'box'

START(-1,-1)
VALUE(Phi)=0   LINE TO (1,-1)
NATURAL(Phi)=0   LINE TO (1,1)
VALUE(Phi)=1   LINE TO (-1,1)

NATURAL(Phi)=0LINE TO FINISH
REGION 2'blob'{the embedded blob}
k=0.001
START 'ring' (R,0) ARC(CENTER=0,0) ANGLE=360 TO FINISH

PLOTS
CONTOUR(Phi)
VECTOR(-k*grad(Phi))
ELEVATION(Phi) FROM (0,-1) to (0,1)
ELEVATION(Normal(-k*grad(Phi))) ON 'ring'
END

我们已经用23条可读语句定义了一个完整并有意义的问题

alvaro 发表于 2007-7-18 10:39

国外著名的有限元软件之一,和COMSOL有的一拼。

咕噜噜 发表于 2007-7-18 15:31

有限元的东西啊,我更倾向于ansys

alvaro 发表于 2007-7-19 15:24

呵呵,有限元这个范围太大了,ANSYS是个非常优秀的软件,但在耦合方面他比不上COMSOL,在价格上他比不上FlexPDE。作有限元的软件很多,建议您多学习几个有限元软件,对您的工作&学习都由帮助

octopussheng 发表于 2007-7-23 21:19

ANSYS仅仅是目前国内盗版的比较好的工具,所以应用就比较多了,呵呵,其实想耦合场分析方面还是推荐comsol,非线性分析方面推荐Abaqus,而显式动力学方面则推荐LSDYNA。

还有MSC的系列软件,包括Patran、Nastran、Marc、Dytran等都是很好用的软件

画网格的话推荐HyperMesh、Ansa

不过做有限元也不能脱离理论和实际的结合哦!

cai5945 发表于 2010-11-8 14:05



{
   This example illustrates the soluT1on of the TTM a gold sample of thickness Lx nm is used
}

TITLE "Two Temperature Model"

COORDINATES
xcylinder('Z', 'R')

SELECT
nonlinear
!Tcenter=1/2
Errlim=0.0001

VARIABLES
Te
T1

DEFINIT1ONS
/*SOURCE DEFINIT1ON*/

    Power=54.4e-3                                             {Pump power in W}
    ref=0.97                                                         {ReflecT1vity of the sample}
Trans=.0297
   delta=13                                                         {penetraT1on depth in nm}
   delta_B=40
   tp=150e-15                                                      {FWHM of the laser pulse}
   spot=(300e-6)/2                                              {Beam Radius}
   J=(((Power/250e3)/3.14159)/(spot^2))       {Laser fluence in J/m2}{J/m2/tp}
   Lx=40                                                                {sample thickness in nm}
   Ly=500                                                            {Laser Spot size in nm}
/*material properites*/
   k=315                                                                {thermal conducT1vity in W/m.K}
   ce=2.1e4                                                          {Electron heat capacity in J/m3.K}
   cl=2.5e6                                                         {LatT1ce heat capacity in J/m3.K}
   G=2e16                                                            {Electron-phonon coupling factor}
   Ta=300                                                             {ambient temperature in K}


A=(J/tp)*(1e9/(delta+delta_B))*(1-ref-Trans)
source=A*(exp(-(Z/(delta+delta_B))))*(exp(-2.77*(t/tp)^2))
s=source/(1-exp(-(Z/(delta+delta_B))))

tstart=-2*tp
tend=6e-12
step=1e-12


INIT1AL VALUE

Te=Ta
T1=Ta

EQUAT1ONS
!Te:
div((Te/T1)*k*grad(Te))-G*(Te-T1)+s=66*Te*dt(Te)
!Te: div((Te/T1)*k*grad(Te))-G*(Te-T1)+source=66*Te*dt(Te)
!T1:
cl*dt(T1)=G(Te-T1)



BOUNDARIES
REGION 1
START(0,0)
line to (0,Ly)
      value(Te)=300
!      value(T1)=Ta
line to (Lx,Ly)
       natural(Te)=Te
!       natural(T1)=Ta
line to (Lx,0)
      value(Te)=Ta
!   value(T1)=Ta
line to finish

TIME
FROM tstart TO tend BY step
PLOTS
for t=tstart BY step TO tend
!elevaT1on (Te) from (0, Ly/2) to (Lx, Ly/2) as "Electron Temperature" range(1000,4000)
elevaT1on (T1) from (0, Ly/2) to (Lx, Ly/2) as "LatT1ce Temperature "   !range(300,420)
contour (Te)
surface (Te)

HISTORIES
history(Te) at (0, Ly/2)export format "#t#r, #i" file="single_B.txt " as "Surface Electron Temperature"
history(T1) at (0, Ly/2) export format "#t#r, #i" file="single_B1.txt" as "Surface LatT1ce Temperature"

history (source) at (0, Ly/2) export format "#t#r, #i"file="ptable3.txt"
history(Te) at (Lx,Ly/2)


END


请问,这个程序哪里有错误?某文章里的。

smtmobly 发表于 2010-11-9 17:31

貌似很强大,但是要钱啊

smtmobly 发表于 2010-11-9 17:34

有限元的商业软件太多了,就付费就很头疼,装ansys装了无数次都没有装好,多次频临崩溃的边缘。
最终选择了自己写程序,差分,有限元。差分要好用些。尤其是流体,是差分的天下。
椭圆的推荐边界元。
看得lz的这些代码就头疼。呵呵,茫茫商业大海,软件无穷
页: [1] 2
查看完整版本: FlexPDE求解一阶微分方程和非线性方程实例