首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab工具箱周期边界条件

Matlab工具箱周期边界条件
EN

Stack Overflow用户
提问于 2016-02-03 16:33:32
回答 1查看 1.5K关注 0票数 0

如何修改matlab工具箱代码以实现周期性边界条件?

EN

回答 1

Stack Overflow用户

发布于 2016-06-13 15:25:03

我在2016年实现了定期边界条件,以便在pde工具箱中使用。它花费了相当长的时间,因为许多函数和数据结构都没有文档化。请注意,我的领域是一个三维立方体,但这里的方法将工作的2D也。(我已经测试了抛物线问题和双曲问题)。似乎通过改变PDE工具箱的"H“矩阵,周期边界条件是可能的,但对于椭圆型、抛物型或双曲型问题,我还没有得到这样一种方法。

下面是对抛物型和双曲型问题执行周期边界条件的方法(使用pde工具箱的直线法):

  1. 使用点的delaunay三角剖分创建一个网格(确保接触域边界的节点具有“匹配”相对面的节点)。注意,3D立方体的pde工具箱生成的网格节点不能使用,因为它们没有适当的周期结构。
  2. 将周期边界条件看作一个含时dirichlet边界条件。在时间相关的条件下,你可能很难得到matlab来处理你的边界条件(我必须省略这里的细节)。但是,我在applyBoundaryCondition()函数中使用的函数如下所示:

函数bcMatrix = tdependentdiri(区域,状态)

% nan被用来“欺骗”matlab将边界条件作为时间依赖的dirichlet来处理。

if( isnan( state.time ))

代码语言:javascript
复制
bcMatrix = NaN;

否则

代码语言:javascript
复制
bcMatrix = state.u;

结束

结束

  1. 更新fas数据(来自generateMesh()中的genmeshinternal() )。不幸的是,我们看不到genmeshinternal()的代码。然而,fas是有六个条目的单元格,每个条目都是一个2xN矩阵。每个条目的第二行。第一行指定面位于区域边界上的四面体。第二行指定(四面体的)哪个节点位于域的内部。编写一个算法来更新网格的fas。实际上,您需要更新下面一行中的每个变量(使用网格数据)(在generateMesh()中):

节点,fas,tet,Hmax,Hmin =geomOrder(self.Geometry,Hmax,Hmin,geomOrder);

注意,节点和tet由delaunay三角剖分来处理。

  1. 节点和边界值(随着时间的变化)的“周期性映射”应该在callValueFuncOnFace()中完成。基本上,您需要将边界上当前解决方案的值更改为其周期伙伴位置上的值(此处由pbc_indx指示):

U= self.uN(:,pbc_indx);% self.uN保存当前时间的解决方案

我把它放在一行后面: appRegion = self.applicationRegion(xyzPts(:,i),faceNormals(:,i));

可能会有更简单的方法,但至少这一种方法最终会奏效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35182582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档