不连续 Galerkin 方法 (DGM) 的多项式归一化

计算科学 有限元 流体动力学 不连续-galerkin
2021-11-29 03:14:22

我很好奇是否有人可以分享他们对此事的看法。我注意到文献中的一些人将他们的勒让德多项式归一化,即将多项式除以或乘以 其中是多项式的阶。我对 DG 很陌生,但是当我规范化我的勒让德多项式时,我体验到的结果比不规范化时更好。人们正常化有什么特别的原因吗?

2n+12,
n

时的密度,归一化勒让德多项式。 T=0.3在此处输入图像描述

时的密度,未归一化勒让德多项式 T=0.3在此处输入图像描述

就分辨率而言,我在网格点上运行。50×50

多项式子程序:

function legendre (x,n)
integer :: n
real(kind=8) :: x
real(kind=8) :: legendre
x = min(max(x,-1.0),1.0)
select case(n)
case(0)
 legendre = 1.0
case(1)
 legendre = x
case(2)
 legendre = 0.5*(3*x**2-1)
case(3)
 legendre = 0.5*(5.0*x**3-3.0*x)
case(4)
 legendre = 0.125*(35.0*x**4-30.0*x**2+3.0)
case(5)
 legendre = 0.125*(63.0*x**5-70.0*x**3+15.0*x)
case(6)
 legendre = 1.0/16.0*(231.0*x**6-315.0*x**4+105.0*x**2-5.0)
end select
legendre = sqrt((2.0*dble(n)+1.0)/2.0)*legendre
return
end function legendre

function legendre_prime (x,n)
integer :: n
real(kind=8) :: x
real(kind=8) :: legendre_prime
x = min(max(x,-1.0),1.0)

select case(n)
case(0)
  legendre_prime = 0.0
case(1)
  legendre_prime = 1.0
case(2)
  legendre_prime = 3.0*x
case(3)
  legendre_prime = 0.5*(15.0*x**2-3.0)
case(4)
  legendre_prime = 0.125*(140.0*x**3-60.0*x)
case(5)
  legendre_prime = 0.125*(315.0*x**4-210.0*x**2+15.0)
case(6)
  legendre_prime = 1.0/16.0*(1386.0*x**5-1260.0*x**3+210.0*x)
end select
legendre_prime = sqrt((2.0*dble(n)+1.0)/2.0)*legendre_prime
return
end function legendre_prime
1个回答

在应用 TVD 限制器并考虑基函数的规范化时,您必须小心。参考 [1],如果您的解决方案为 其中 这里是自由度或解变量,是单元格平均值。您将斜率限制为 由于您的规范化,您的解决方案的形式为 现在

uh(x,y)=u¯+uxϕi(x)+uyψj(y)
ϕi(x)=xxiΔxi/2,ψj(y)=yyjΔyj/2
u¯,ux,uyu¯
ux=minmod(ux,u¯i,ju¯i1,j,u¯i+1,ju¯i,j)
uh(x,y)=u¯1/2+ux3/2ϕi(x)+uy3/2ψj(y)
u¯不是细胞平均值。您必须考虑这些差异并正确修改限制器步骤。

[1] Bernardo Cockburn 和 Chi-Wang Shu,Runge-Kutta 不连续 Galerkin 守恒定律 V 方法,JCP,141,1998 多维系统