Установите начальное условие для модели с тонким Mesh с помощью решения, полученного с более грубым Mesh

Установите начальные условия для модели с мелким mesh с помощью решения грубой сетки из предыдущего анализа.

Создайте модель УЧП и включите геометрию встроенной функции squareg.

model = createpde;
geometryFromEdges(model,@squareg);

Задайте коэффициенты, примените граничные условия и установите начальные условия.

specifyCoefficients(model,'m',0,'d',1,'c',5,'a',0,'f',0.1);
applyBoundaryCondition(model,'dirichlet','Edge',1,'u',1);
setInitialConditions(model,10);

Сгенерируйте сравнительно грубый mesh с целевой максимальной длиной ребра элемента 0,1.

generateMesh(model,'Hmax',0.1);

Решить модель для всего временного интервала от 0 до 0,02 секунд.

tlist = linspace(0,2E-2,20);
Rtotal = solvepde(model,tlist);

Интерполируйте решение в источник на протяжении всего временного интервала.

singleSpanSol = Rtotal.interpolateSolution(0,0,1:numel(tlist)); 

Теперь решите модель для первой половины временного интервала. Вы будете использовать это решение как начальное условие при решении модели с более мелким mesh для второй половины временного интервала.

tlist1 = linspace(0,1E-2,10);
R1 = solvepde(model,tlist1);

Создайте интерполяцию, чтобы интерполировать начальное условие.

x = model.Mesh.Nodes(1,:)';
y = model.Mesh.Nodes(2,:)';
interpolant = scatteredInterpolant(x,y,R1.NodalSolution(:,end));

Сгенерируйте более мелкий mesh путем установки целевой максимальной длины ребра элемента равной 0,05.

generateMesh(model,'Hmax',0.05);

Используйте результаты модели грубого mesh в качестве начального условия для модели с более мелким mesh. Для определения icFcn функция, см. Функция начальных условий.

setInitialConditions(model,@(region) icFcn(region,interpolant));

Решить модель для второй половины временного интервала.

tlist2 = linspace(1E-2,2E-2,10);
R2 = solvepde(model,tlist2);

Интерполируйте решения в источник для первой и второй половин временного интервала.

multispanSol1 = R1.interpolateSolution(0,0,1:numel(tlist1));
multispanSol2 = R2.interpolateSolution(0,0,1:numel(tlist2));

Постройте график всех трех решений в источник.

figure
plot(tlist,singleSpanSol)
hold on
plot(tlist1, multispanSol1,'r*')
plot(tlist2, multispanSol2,'ko')
legend('Overall solution','Coarse mesh solution', 'Fine mesh solution')

Figure contains an axes. The axes contains 3 objects of type line. These objects represent Overall solution, Coarse mesh solution, Fine mesh solution.

Функция начальных условий

function u0 = icFcn(region,interpolant)
u0 = interpolant(region.x',region.y');
end