Matlab PDE Toolbox не может решить проблему адвекции-диффузии - PullRequest
0 голосов
/ 04 октября 2019

Из любопытства я проверил набор инструментов Matlab для PDE и обнаружил, что он не может решить уравнение адвекции-диффузии в соответствии с документацией здесь .

В PDE, написанном вдокументация, у вас есть только термин диффузии, но нет термина адвекции. Есть ли причина, почему? Для такого стандартного уравнения я бы ожидал, что Matlab сможет справиться с этим.

1 Ответ

0 голосов
/ 24 октября 2019

Традиционные методы конечных элементов , такие как традиционный Galerkin FE , который , кажется, реализован в борьбе Matlab (например, нефизические колебания)в решении) с несамосопряженными уравнениями, такими как параболическое уравнение адвекции-диффузии без изменений в числовой схеме.

Вы, тем не менее, можете сделать это с помощью указав непостоянную f . У меня в настоящее время нет доступа к лицензии Matlab , но в соответствии с документацией вы можете получить доступ к состоянию структур, которое должно содержать пассивный скаляр и его градиенты, а также местоположение, содержащее координаты. Это должно позволить вам задать либо постоянную скорость, либо построить аналитический профиль скорости (например, профиль Poiseuille ) с координатами. (Может быть, в этой функции можно также использовать точечный профиль скорости?)

Попробуйте установить m = 0 , d = 1 , c = D (коэффициент диффузии), a = 0 и вычисляют f с использованием двух структур: состояние (state.ux, состояние.uy, state.uz - градиенты транспортируемого скаляра u) и location (location.x, location.y и location.z) для наложения аналитического профиля скорости. Следующий псевдокод должен дать уравнение диффузии-адвекции с постоянной скоростью в направлении х.

% set density
rho = 1;

% set viscosity
D = 1;

% set constant velocity
vel = [1, 0, 0];

% set coefficients for diffusion equation
specifyCoefficients(model,'m',0,...
                          'd',rho,...
                          'c',D,...
                          'a',0,...
                          'f',@fcoeffunction);

...

%% function for determining f
function f = fcoeffunction(location,state)

    f = - rho*( vel(1)*state.ux + vel(2)*state.uy + vel(3)*state.uz); %calculate f from constant velocities

end

Теоретически это должно дать вам уравнение адвекции-диффузии. По сути, мы моделируем адвекционную часть с помощью искусственного источника , который обращается к градиентам скалярного количества. Это похоже на то, что вы можете сделать в 1D с pdepe , где вы можете получить доступ к градиенту с помощью dudx.

...