Как использовать макросы для ускорения и автоматизации вашего рабочего процесса в COMSOL®

Walter Frei 22/06/2017
Share this on Facebook Share this on Twitter Share this on LinkedIn

Вы когда-нибудь сталкивались с тем, что при моделировании приходится повторять одни и те же операции в каждой новой модели? Или, к примеру, ваши коллеги присылают вам модели, в которые вы должны в ручную добавить необходимые физические интерфейсы и некоторые функции. Знакомая ситуация? Если это так, то с помощью доступного начиная с версии 5.3 COMSOL Multiphysics® нового функционала по созданию макросов (в англоязычном интерфейсе model methods), можно значительно ускорить рабочий процесс. Давайте же узнаем, как это сделать.

Создание макроса в COMSOL Multiphysics® вручную

Из предыдущей статьи, посвященной созданию рандомизированной геометрии, мы узнали, как использовать функцию Record Method (записать метод) для записи в виде скрипта последовательности операций, выполняемых в графическом пользовательском интерфейсе (GUI) COMSOL Multiphysics, а затем воспроизводить этот метод, чтобы повторять те же шаги при необходимости. Конечно, этот подход не принесёт особой пользы, если файл модели уже создан. Не будем же мы возвращаться и перезаписывать весь файл. Но, оказывается, COMSOL Multiphysics автоматически сохраняет историю всех действий в модели как файл с Java®-кодом. Можно просто скопировать необходимые операции непосредственно из этого кода и вставить в новую модель.

На рисунке показано окно узла Compact History в графическом интерфейсе COMSOL Multiphysics.
Окно узла Compact History (Компактная история операций).

Чтобы скопировать всю историю операций, необходимо выполнить несколько шагов. Сначала в верхнем левом углу откройте вкладку File и из выпадающего списка выберете Compact History. Программное обеспечение COMSOL Multiphysics хранит буквально всю историю команд, однако в данном случае необходимо использовать минимальный набор команд для создания нашей модели. Далее выполняем следующие шаги: File Menu > Save As и сохраняем как Java-файл (в интерфейсе COMSOL опция называется Model File for Java). После этого создаётся текстовый файл с Java®-кодом. Попробуйте проделать эти шаги сами а затем открыть итоговый файл в тектовом редакторе. В этом файле в начале и в конце всегда типичные строки кода, похожие на те, что показаны ниже.

/*example_model.java */
import com.comsol.model.*;
import com.comsol.model.util.*;
public class example_model {
  public static Model run() {
    Model model = ModelUtil.create("Model");
    model.modelPath("C:\\Temp");
    model.label("example_model.mph");
    model.comments("This is an example model");
         ...
         ... /* Lines of code describing the model contents */
         ...
     return model;
 }
 public static void main(String[] args) { run();}
}

Приведённый фрагмент кода показывает то, что мы можем удалить. Для определения всех объектов в модели используется только код между строками Model model = ModelUtil.create("Model"); и return model;. На самом деле можно также удалить строки model.modelPath();, model.label();, и model.comments(); lines. Попробуйте удалить все эти строки в текстовом редакторе и у вас останется только набор команд, используемых для воспроизведения модели.

Далее создайте новую пустую модель (black model), перейдите в Application Builder (Среду разработки приложений) и создайте новый макрос (model method). Скопируйте все строки с кодом из отредактированного текстового файла в новый макрос. Затем вернитесь в Model Builder (Построитель моделей), перейдите во вкладку Developer (Разработчик) и выберете Run Model Method (Запустить макрос), чтобы выполнить этот код. Запуск этого макроса воспроизведёт все шаги из исходного файла, включая решение модели. Однако оно может занять много времени, поэтому часто потребуется сократить код.

На рисунке показано окно, в котором записывается код макроса в Application Builder.
Код макроса в Application Builder.

Редактирование макроса

Есть два способа редактирования кода. Первый заключается в том, чтобы вручную отредактировать код на Java®, удаляя ненужные строки. Если вы собираетесь заниматься скриптами/макросами в COMSOL, то будет полезно ознакомиться с Programming Reference Manual (Справочным руководством по программированию в COMSOL), т.к. вам понадобятся знания о том, что значит каждая команда и строчка кода. Второй и более простой способ заключается в удалении некоторых операций непосредственно в среде COMSOL Multiphysics. Начните с создания копии оригинального файла модели и удалите всё, что вам не понадобится в макросе. Вы можете удалить геометрическую последовательность, построение сетки, шаги и настройки исследования, визуализацию результатов и любые другие элементы.

Давайте разберем это на конкретном примере. Предположим, что мы построили модель теплового отверждения и хотим добавить функционал расчета данного процесса в другую модель, в которой уже используется физический интерфейс теплопередачи.

В одной из прошлых заметок мы показали, какие три шага необходимо выполнить, чтобы их совместить:

  1. Определение набора параметров для материала
  2. Добавление физического интерфейса Domain ODE для моделирования процесса затвердевания с течением времени
  3. Совмещение интерфейсов между собой с помощью взаимосвязи (добавление источника тепла связанного с реакцией в термическую задачу).

Можно построить модель, которая содержит эти три шага, в графическом интерфейсе COMSOL. Конечно, нам по-прежнему необходимо будет вручную отредактировать часть кода. Повторимся, что для получения базовых знаний, желательно ознакомиться с Application Programming Guide (Руководством по программированию приложений). Как только разберётесь в синтаксисе, вы поймёте, что вышеупомянутые три шага в графическом интерфейсе могут быть записаны посредством следующего скрипта:

model.param().set("H_r", "500[kJ/kg]", "Total Heat of Reaction");
model.param().set("A", "200e3[1/s]", "Frequency Factor");
model.param().set("E_a", "150[kJ/mol]", "Activation Energy");
model.param().set("n", "1.4", "Order of Reaction");
model.component("comp1").physics("ht").create("hsNEW", "HeatSource");
model.component("comp1").physics("ht").feature("hsNEW").selection().all();
model.component("comp1").physics("ht").feature("hsNEW").set("Q0", "-ht.rho*H_r*d(alpha,t)");
model.component("comp1").physics().create("dode", "DomainODE", "geom1");
model.component("comp1").physics("dode").field("dimensionless").field("alpha");
model.component("comp1").physics("dode").field("dimensionless").component(new String[]{"alpha"});
model.component("comp1").physics("dode").prop("Units").set("SourceTermQuantity", "frequency");
model.component("comp1").physics("dode").feature("dode1").set("f", "A*exp(-E_a/R_const/T)*(1-alpha)^n");

Первые четыре строки данного кода определяют дополнительный набор глобальных параметров. С помощью следующих трёх строк мы добавляем функцию Источник тепла к существующему физическому интерфейсу Теплопередача (Heat Transfer, с тегом ht), определяем этот источник и применяем его ко всем областям. Последние пять строк определяют и настраивают физический интерфейс Domain ODE, который применяется по умолчанию ко всем областям модели, и задают имена переменных, размерности, а также уравнения, которые будет решаться в данном интерфейсе.

На рисунке показано окно запуска скриптов (model methods) на панели Developer в COMSOL Multiphysics.
Окно запуска макроса на панели Developer (Разработчик).

Мы можем запустить данный макрос в модели, которая уже содержит настройки для исследования теплопередачи. Например, попробуйте добавить и запустить этот макрос в учебном примере Axisymmetric Transient Heat Transfer (Осесимметричная модель переходного процесса теплопередачи), который доступен в Бибилотеке приложений COMSOL Multiphysics. Затем перезапустите модель на расчёт, чтобы рассчитать как температуру, так и степень отверждения.

Перечислим несколько предположений с учетом которых был разработан вышеуказанный код:

  • Мы хотим смоделировать отверждение во всех доменах модели
  • В модели уже есть узел component (компонент) с тегом comp1, к которому мы можем добавлять физические интерфейсы
  • В этом узле модели нет физического интерфейса Domain ODE с тегом dode
  • Переменная температуры определяется, как T. Это стандартная переменная, и мы можем использовать в физическом интерфейсе Domain ODE.
  • Физический интерфейс Heat Transfer in Solids с тегом ht уже существует, и мы добавляем в него условие с тегом hsNEW

Конечно, по мере разработки собственных скриптов и макросов вам нужно будет уметь определять и разрешать такие классические логические аспекты программирования

Заключительные замечания

Данный пример макроса может использоваться как шаблон для ваших последующих скриптов по автоматизации процесса моделирования в COMSOL Multiphysics. Вы можете копировать этот шаблон в любую новую модель, чтобы загрузить в неё пользовательский набор свойств материала, настроить сложные физические интерфейсы или определить комплексные системы уравнений. Разнообразные макросы можно также использовать в уже созданном файле для настройки типа исследования, модификации параметров решателя или вывода определенной визуализации результатов, которые вы планируете повторно использовать.

Как только освоите базовые навыки в программировании макросов и скриптов в COMSOL, вы сможете значительно оптимизировать время разработки комплексных моделей. Надеемся, что данная статья помгла вам в этом!

Узнайте о других способах использования макросов

Oracle и Java являются зарегистрированными товарными знаками корпорации Oracle и/или аффилированных с нею компаний.


Загрузка комментариев...

Темы публикаций


Теги

3D печать Cерия "Гибридное моделирование" Введение в среду разработки приложений Видео Волновые электромагнитные процессы Глазами пользователя Графен Интернет вещей Кластеры Моделирование высокочастотных электромагнитных явлений на различных пространственных масштабах Модуль AC/DC Модуль MEMS Модуль Акустика Модуль Волновая оптика Модуль Вычислительная гидродинамика Модуль Геометрическая оптика Модуль Динамика многих тел Модуль Композитные материалы Модуль Коррозия Модуль Механика конструкций Модуль Миксер Модуль Нелинейные конструкционные материалы Модуль Оптимизация Модуль Плазма Модуль Полупроводники Модуль Радиочастоты Модуль Роторная динамика Модуль Теплопередача Модуль Течение в трубопроводах Модуль Химические реакции Модуль Электрохимия Модуль аккумуляторов и топливных элементов Охлаждение испарением Пищевые технологии Рубрика Решатели Серия "Геотермальная энергия" Серия "Конструкционные материалы" Серия "Электрические машины" Серия “Моделирование зубчатых передач” Сертифицированные консультанты Технический контент Указания по применению физика спорта