相位错和数值精度

计算科学 pde 计算物理学
2021-11-26 20:11:43

我正在求解非线性薛定谔方程(NLSE),

At+iAxx+i|A|2A=0
在哪里A是一个复值函数,可以写为A=aeiθ为了a,θ真实的。现在,对于特定的初始条件集,我发现会发生相位错,因此频率存在奇点,ω=θt.

我的问题是,相位奇点会影响模型的准确性吗?此外,在物理上,为什么在 WKB 假设下导出的方程中会出现相位的快速变化?这是否意味着方程不是一致有效的?

下面将提供一个示例。

我正在使用分步伪光谱方法。我的代码是用 Fortran 编写的,但我发现我可以使用我在网上找到的 Matlab 代码重现结果,如下所示。

初始条件采用以下形式

A=sech(x)eiCx2

为了C一个常数,表示信号的啁啾,由于色散可能导致数据包聚焦。数据包的演变过程如图 1 所示。在此处输入图像描述

现在,有问题的现象发生在周围t=0.20当幅度a变为 0,因此相位没有很好地定义。这导致了奇点ω. 图 2 显示了一个更好的图像。

在此处输入图像描述

我们看到,随着幅度在组的前部和后部趋向 0,即数据包分裂,相位开始变得奇异。注意,我已经淘汰了ω10 倍来说明我的观点。

注意,幅度a启发式地似乎变化缓慢,但相位显然具有快速变化,其中数据包幅度变小。这是否意味着我的结果不再是物理的?最后,这是题外话,什么设置了标志ω在这些奇点?

注意,为了检查该方案的数值准确性,我确认能量是守恒的106. 此外,NLSE 存在精确的解决方案,我用所使用的分辨率和步长确认了很长时间的解决方案。最后,线性波速的 CFL 条件 (u=1这里)被服从。我玩过分辨率和时间步长,发现它们给出了相同的结果。

Matlab脚本:

  %  This Matlab script file solves the nonlinear Schrodinger equation
  %  with the first order split-step Fourier method due to Hardin and Tappert. 
  %                              Andre Weideman, 1995
  %
  N=512; %number of fourier modes
  dt = 0.001;  %time step
  M=300; % number of time steps
  t=0:dt:M*dt-dt; 
  L=4*pi; % size of the domain 
  I=sqrt(-1); 
  % J=100;
  h = L/N;                       % Space step
  n = [-N/2:1:N/2-1]';           % Indices
  x = n*h;            % Grid points
  %----------------------------------------
  % IC: Chirped sech packet
  u=sqrt(2)*sech(x).*exp(-I*x.^2); 
  %----------------------------------------
  U = u;           % Compute initial condition; save it in U
  e = -4*n.*n*pi*pi/L/L;         % Squares of wavenumbers.
  for m = 1:1:M                  % Start time evolution
  u = exp(dt*I*(abs(u).*abs(u))).*u;  % Solve nonlinear part of NLS
  c = fftshift(fft(u));                 % Take Fourier transform
  c = exp(dt*I*e).*c;                   % Advance in Fourier space
  u = ifft(fftshift(c));                % Return to physical space                   
  U = [U u];                           
  end        
0个回答
没有发现任何回复~