关于在以下代码中使用assempde

时间:2015-05-25 22:43:40

标签: matlab finite-element-analysis

我试图理解这段代码。所以,我已经简要地记下了我的理解,如果有人能澄清我的疑虑,我会感激不尽。

[p,e,t] = initmesh('lshapeg');

这将返回“L”形的2D三角形网格。但是,我怎样才能改变L形的边界?我的意思是默认的L形在x和y轴上以-1到1为界。此外,是否有其他形状,如'lshapeg' ...就像说方形?

[p,e,t] = refinemesh('lshapeg',p,e,t);

pdemesh(p,e,t)

现在在由L形膜限定的几何形状上求解泊松方程-Δu= 1。在∂Ω上使用Dirichlet边界条件u = 0,并绘制结果。

u = assempde('lshapeb',p,e,t,1,0,1);

现在我无法理解1,0,1的重要性。我尝试更改它们并观察图形结果,但无法理解边界条件是如何应用的。另外,lshapeb和lshapeg有什么区别?

pdemesh(p,e,t,u)

1 个答案:

答案 0 :(得分:0)

嗯,他们只是调用PDE问题,遵循实现FEM方法的标准步骤。从这里开始,我很清楚你知道FEM是什么以及它涉及到什么。我也假设我们是2D .....

  

[p,e,t] = initmesh(' lshapeg');

嗯,正如你所说的那样,几乎所有FEM程序都需要初始的三角形网格。我们的第一个用于数字解决PDE的babystep。当然它可以'正方形'但是让三角形暂时保持安静......玫瑰是红色的,紫罗兰是蓝色的......

  

[p,e,t] = refinemesh(' lshapeg',p,e,t);

这里初始网格被精炼了#39;细化是网格尝试“适应”的预处理步骤。解决问题而不解决它。这一步是批评者,并且有数百种可用的方法。这里的功能,只考虑几何形状,并且只是平滑'三角形有点。此外,没有考虑到对称性,所以不要期待这里的金牌......

  

pdemesh(P,E,T)

此步骤仅绘制网格,供您查看并将其粘贴到任何地方。

  

u = assempde(' lshapeb',p,e,t,1,0,1);

正如你所说,你在这里建立了等式。检查doc assempde,您会清楚地看到u = assempde(b,p,e,t,c,a,f)的含义:

  

-∇⋅(c∇u)+ AU = F,

你将检查泊松方程是否为:

  • c = 1,这可能是材料的电容率,热扩散,或机械运动粘度等......
  • a = 0,一个线性项,对电气或热量或流体情况(XD)没有直接意义,......
  • f = 1,单一电荷或热源,或机械力或压力,......

请注意,lshapeg只是 Matlab徽标形状,因此如果您有自己的问题,请查看decsg | pdegeom函数,并在那里设置自己的几何图形!! ....

我想,这回答了大多数问题......

修改

检查here以获得更好的示例。

对于Dirichlet边界条件 - 即u(x) = u0上的∂Ω

applyBoundaryCondition(model,'Face',1:4,'u',0);

和Neumann边界条件 - 即du/dx = u0'上的∂Ω

applyBoundaryCondition(model,'Face',6,'g',-1);