Сложности с расчетом при использовании сетки mesh с неравномерным шагом
Уважаемые форумчане,
У кого есть опыт работы с функцией mesh?
Написан код, посвященный решению задачи теплопроводности: рассматривается нагрев воды лазерным импульсом, решается задача теплопроводности.
Задается начальное распределение температуры среды, граничные условия и изучается распространение тепла с течением времени.
Изначально код работал с функцией generateMesh, задающей сетку с фиксированным размером ячейки, и при этом позволял выполнять расчеты для нескольких лазерных импульсов.
При этом конечное распределение температуры после 1-го лазерного импульса использовалось как начальное распределение для 2-го и т.д. Временной профиль теплового источника в коде задается переменной “A”.
С реализацией в 2021 версии Matlab сетки с переменным размером ячейки появилась возможность сократить время расчетов, увеличив шаг сетки ближе к стенкам области расчета (подальше от лазерного источника). Как только я заменил в коде задание сетки с равномерным шагом на неравномерный, код, к сожалению, перестал работать, в случае, если число импульсов более 1.
Расчет для нескольких импульсов реализован в цикле, в конце которого я запоминаю распределение температуры в узлах сетки в переменную Last_U. При попытке подставить это распределение в качестве начального для второго импульса выскакивает ошибка.
Я, очевидно, не понимаю какой-то тонкости работы с узлами сетки, не понимаю, на что ругается код и как эту ошибку исправить.
"Unable to perform assignment because the size of the left side is
14424-by-1 and the size of the right side is 1-by-15111".
Помогите, пожалуйста, исправить ошибку.
В приложении архив с файлами:
For_forum_uniform.m - рабочий файл с равномерным шагом сетки.
For_forum_nonuniform.m - неработающий файл с неравномерным шагом сетки.
A_profile.mat - файл с переменной "А" временного профиля теплового источника.
Комментарии
Элементам массива размером
14424-by-1
присваиваются значения элементов массива размером1-by-15111
. Так как количество элементов не совпадает, то выдается ошибка.При инициализации в структуру
results
записываются пустые поля, поэтому туда потом записывается все что угодно. Но на втором шаге цикла размеры массивов по какой-то причине различаются, поэтому присваивание результатов в те же поля структуры невозможно. Это происходит из-за того, что где-то в скрипте или используемой функции выполняется операция присваиваивания проиндексированных значений, типа... = x(1:10)
, требующая совпадения размеров массивов.Чтобы сильно не заморачиваться, сделайте так чтобы на каждом шаге цикла результаты записывались в новую структуру. Например, можно прописать присваивание результатов в results типа nested structure и далее на
i
-м шаге цикла записывать результаты например вresults(i).NodalSolution
и т.д.Большое спасибо за ответ!
Скажите, а в случае использования новой структуре в цикле типа results(i).NodalSolution
не будет ли нарушена логика выполнения расчетов?
Ведь задача передать результат расчетов в узлах (распределение температуры) в качестве начального значения этих узлов на следующем цикле.
Полагаю, что для этого также потребуются изменения.
createpde (не у всех такой компонент бывает)
PS: На рисунке пример из хелпа с измененными двумя строчками. Ясно прослеживается разная сетка на графике.
Так с ходу трудно сказать. Я попробовал поменять скрипт, с кондачка ничего не получилось :(
. . . . .
Подробности не знаю, но получается одномерное распределение т-ры во вренмени. если б было двумерное, то был бы 3 мерный массив. Это наверно в данном случае не сильно важно.
Я не знаком с тем что такое у вас model (как писал, ПДЕ тулс у нас нет, и не знаком с ним.) Есть мысль, что когда вы инициализируете в цикле (195), то в объекте model что-то меняется. Поэтому не прокатывает на следующей итерации, т.к. размер не тот.
Ф-ция инициализации что делает?
Geometric space math is not my strong suit, but the way you explained it helped me grasp it much better Quordle.
In just three steps, BalenaEtcher download promises to burn operating system images to SD cards and portable media flawlessly. This will make it easy for you to comprehend complicated procedures. ffh4x download
An alternative app store is Aurora Store. This is the same app; you don't need a Google Play account to download the APK offer from Google Play. pgsharp download
PGSharp is a free Android programming that allows you to change your Pokémon GO GPS area. aniyomi
PGSharp is a free Android programming that allows you to change your Pokémon GO GPS area. aniyomi