• Регистрация
Dmitrii_S
Dmitrii_S +1.00
н/д

Сложности с расчетом при использовании сетки mesh с неравномерным шагом

22.11.2022

Уважаемые форумчане, 

У кого есть опыт работы с функцией 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 - файл с переменной "А" временного профиля теплового источника.

Теги

    22.11.2022

    Лучший ответ

    • aBoomest+942.89
      23.11.2022 12:00

      . . . . .

      Подробности не знаю, но получается одномерное распределение т-ры во вренмени. если б было двумерное, то был бы 3 мерный массив. Это наверно в данном случае не сильно важно.

      Я не знаком с тем что такое у вас model (как писал, ПДЕ тулс у нас нет, и не знаком с ним.) Есть мысль, что когда вы инициализируете в цикле (195), то в объекте model что-то меняется. Поэтому не прокатывает на следующей итерации, т.к. размер не тот.

      Ф-ция инициализации что делает?

    Ответы

    • alextip
      alextip+46.13
      22.11.2022 18:37

      Элементам массива размером 14424-by-1 присваиваются значения элементов массива размером 1-by-15111. Так как количество элементов не совпадает, то выдается ошибка.

      При инициализации в структуру results записываются пустые поля, поэтому туда потом записывается все что угодно. Но на втором шаге цикла размеры массивов по какой-то причине различаются, поэтому присваивание результатов в те же поля структуры невозможно. Это происходит из-за того, что где-то в скрипте или используемой функции выполняется операция присваиваивания проиндексированных значений, типа ... = x(1:10), требующая совпадения размеров массивов.

      Чтобы сильно не заморачиваться, сделайте так чтобы на каждом шаге цикла результаты записывались в новую структуру. Например, можно прописать присваивание результатов в results типа nested structure и далее на i-м шаге цикла записывать результаты например в results(i).NodalSolution и т.д.

      • Dmitrii_S
        Dmitrii_S+1.00
        22.11.2022 19:07

        Большое спасибо за ответ!

        Скажите, а в случае использования новой структуре в цикле типа results(i).NodalSolution

        не будет ли нарушена логика выполнения расчетов?

        Ведь задача передать результат расчетов в узлах (распределение температуры) в качестве начального значения этих узлов на следующем цикле.

        • aBoomest
          aBoomest+942.89
          22.11.2022 19:16

          Полагаю, что для этого также потребуются изменения.

      • aBoomest
        aBoomest+942.89
        22.11.2022 19:10

        createpde (не у всех такой компонент бывает)

        PS: На рисунке пример из хелпа с измененными двумя строчками. Ясно прослеживается разная сетка на графике.

        • alextip
          alextip+46.13
          22.11.2022 19:16

          Скажите, а в случае использования новой структуре в цикле типа results(i).NodalSolution

          не будет ли нарушена логика выполнения расчетов?

          Ведь задача передать результат расчетов в узлах (распределение температуры) в качестве начального значения этих узлов на следующем цикле.

          Так с ходу трудно сказать. Я попробовал поменять скрипт, с кондачка ничего не получилось :(

          • aBoomest
            aBoomest+942.89
            23.11.2022 09:40

            . . . . .

            Подробности не знаю, но получается одномерное распределение т-ры во вренмени. если б было двумерное, то был бы 3 мерный массив. Это наверно в данном случае не сильно важно.

            Я не знаком с тем что такое у вас model (как писал, ПДЕ тулс у нас нет, и не знаком с ним.) Есть мысль, что когда вы инициализируете в цикле (195), то в объекте model что-то меняется. Поэтому не прокатывает на следующей итерации, т.к. размер не тот.

            Ф-ция инициализации что делает?

            • madeline
              madeline0.00
              20.12.2022 04:00

              Geometric space math is not my strong suit, but the way you explained it helped me grasp it much better Quordle.

              • weejay
                weejay0.00
                8.03.2023 14:00

                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

                • weejay
                  weejay0.00
                  8.03.2023 14:01

                  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

                  • weejay
                    weejay0.00
                    8.03.2023 14:02

                    PGSharp is a free Android programming that allows you to change your Pokémon GO GPS area. aniyomi

                    • ffh4x
                      ffh4x0.00
                      16.01.2024 10:07

                      PGSharp is a free Android programming that allows you to change your Pokémon GO GPS area. aniyomi