我们如何修改matlab PDE工具箱代码以实现周期性边界条件?
答案 0 :(得分:0)
我能够在2016a中实现周期性边界条件,以便在pde工具箱中使用。由于没有记录许多功能和数据结构,因此花了相当多的时间。请注意我的域是一个三维立方体,但这里的方法也适用于2D。 (我已经测试了它的抛物线和双曲线问题)。似乎应该可以通过改变PDE工具箱来实现周期性边界条件" H"矩阵,但我还没有能够采用这种方法来处理椭圆,抛物线或双曲线问题。
以下是实现抛物线和双曲线问题的周期性边界条件的方法(使用pde工具箱的线条方法):
使用点的delaunay三角剖分创建网格(确保触及域边界的节点具有在相对面上匹配的节点)。请注意,不能使用pde工具箱为3D立方体生成的网格节点,因为它们没有适当的周期性结构。
将周期性边界条件视为时间相关的dirichlet边界条件。你可能在使用matlab处理时间相关的边界条件时遇到一些麻烦(我必须在这里省略细节)。但是,我在applyBoundaryCondition()函数中使用的函数如下:
function [bcMatrix] = tdependentdiri(region,state)
%nan用于"技巧" matlab将边界条件视为时间依赖的dirichlet
if(isnan(state.time))
bcMatrix = NaN;
否则
bcMatrix = state.u;
端
端
[nodes,fas,tet,Hmax,Hmin] = genmeshinternal(self.Geometry,Hmax,Hmin,geomOrder);
请注意,节点和tet由delaunay三角测量处理。
state.u = self.uN(:,pbc_indx); %self.uN保存当前时间的解决方案
我把它放在以下行之后: appRegion = self.applicationRegion(xyzPts(:,i),faceNormals(:,i));
可能有一种更简单的方法,但至少这一种方法最终会有效。