Erro de análise [bug?] Com sistemas de PDEs não lineares, Mathematica 12.0.0

Aug 18 2020

Bug introduzido em 12.0 e persistente até 12.1.1 - corrigido na versão: 12.2

Acho o seguinte comportamento usando 12.0.0. (EDITAR: Pedi a um amigo para experimentar em 12.1.1 e ele encontrou o mesmo resultado.)

Aqui está um sistema de PDEs não lineares acoplados que NDSolvenão podem ser analisados ​​(não se preocupe com o sistema em si, é apenas o exemplo mais simples que encontrei que produz esse comportamento):

c = {{1, 0}, {0, v[x, y]}};
alpha = {0, -u[x, y]};
NDSolveValue[{-Inactive[Div][c.Inactive[Grad][u[x, y], {x, y}], {x, y}] == 0, 
     -Inactive[Div][Inactive[Times][alpha, v[x, y]], {x, y}] ==0}, {u[x, y], v[x, y]}, 
Element[{x, y}, Disk[]]]

A saída é

NDSolveValue :: femper: Erro de análise PDE de Div [{{1,0}, {0, v}}. Grad $ 9730]. Dimensões de equação inconsistentes.

Parece que uma funcionalidade extremamente básica é um bug. Talvez eu esteja perdendo algo simples. Tentei incluir muitas chamadas para, de Inactivemodo que o analisador não tivesse problemas para identificar os coeficientes, que de outra forma poderiam ser ambíguos com sistemas não lineares.

Observe que a análise não é problema com um problema linear semelhante:

c = {{1, 0}, {0, 1}};
alpha = {0, -1};

Também não há problemas de análise ao reduzir as variáveis ​​dependentes a uma dimensão (em {u}vez de {u,v}), mas mantê-la não linear (por exemplo c1 = {{1, 0}, {0, u[x, y]}}). Portanto, esse problema parece ser devido à combinação de ser acoplado e não linear.

Observe também que há uma solução alternativa óbvia, que é seguir a rota de "programação FEM" e apenas especificar os coeficientes pde via InitializePDECoefficients. Mas ainda assim ... o que há aqui?

Respostas

user21 Dec 17 2020 at 08:50

Este é um bug e foi corrigido na versão 12.2

c = {{1, 0}, {0, v[x, y]}};
alpha = {0, -u[x, y]};
NDSolveValue[{-Inactive[Div][
     c . Inactive[Grad][u[x, y], {x, y}], {x, y}] == 
   0, -Inactive[Div][Inactive[Times][alpha, v[x, y]], {x, y}] == 
   0}, {u[x, y], v[x, y]}, Element[{x, y}, Disk[]]]

Você receberá um aviso esperado sobre condições de limite ausentes, mas, exceto que ele retorna uma solução.

NamNguyen Nov 03 2020 at 18:57

Eu tenho o mesmo bug com NDSolve. Para o Mathematica 11, funciona. Mas o mesmo notebook é executado no Mathematica 12.0, ele produz:

NDSolveValue::ndnum: Encountered non-numerical value for a derivative at t == 0.`.



In[2]:= $Version

Out[2]= "12.0.0 for Microsoft Windows (64-bit) (April 6, 2019)"