Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Красников Моделирование физических процессов с исползованием 2012

.pdf
Скачиваний:
172
Добавлен:
12.11.2022
Размер:
12.78 Mб
Скачать

запишет набор переменных в файл script1.ws в текущую директорию (по умолчанию это будет директория, в которую установлен FEMLAB). Загрузить файл можно инструкцией load [имя файла]:

C» load script1

Чтобы записать только определённый набор переменных, следует их указать через пробел после имени файла. Вот так будут сохранены в файле переменные A и С.

C» save script1 A C

Чтобы сменить текущую директорию, следует ввести команду cd [имя директории]. Просмотреть текущую директорию можно командой pwd.

4.3.3. Векторы, матрицы и массивы в Comsol Script

Оператором «Двоеточие» (:) можно создать вектор с фиксированным шагом от заданного минимального до максимального значения. Инструкция x=a:b создаст вектор от a до b с шагом 1:

C» x=1:10

x =

1

2

3

4

5

6

7

8

9

10

Если требуется задать шаг, отличный от 1, то он задаётся в виде x=a:i:b, где i – нужный интервал.

C» x=0:0.2:1

 

 

 

x =

 

 

 

0

0.200000

0.400000

0.600000

0.800000

1

 

 

161

Задать вектор, или матрицу заполненную нулями, или единицами, можно сделать с помощью команд zeros(M,N) и ones(M,N) соответственно:

one

= ones(3)

one

=

 

1

1

1

1

1

1

1

1

1

C» zeros = zeros(2,3) zeros =

0

0

0

0

0

0

Команда ones(N) эквивалентна команде ones(N,N).

Комадна eye(N) создаёт единичную матрицу размерности N. Этой командой можно создать единичную неквадратную матрицу с единицами по главной диагонали.

C» eye(4,5)

 

 

ans =

 

 

 

 

1

0

0

0

0

0

1

0

0

0

0

0

1

0

0

0

0

0

1

0

4.4. Элементы программирования в Comsol Script

Среда Comsol Script включает в себя язык программирования высокого уровня. Рассмотрим основные конструкции, управляющие программой в среде.

162

4.4.1. Оператор ветвления if

Оператор if позволяет выполнять инструкции только при выполнении определённого условия:

if rank(A)<3

warning('Matrix does not have full rank!')

end

В данном случае условие rank(A)<3. Инструкция warn-

ing('Matrix does not have full rank!') (а также все остальные

до инструкции end, если они есть) выполняется только в том случае, если оно верно. Блок if всегда должен заканчиваться инструкцией end.

Также в конструкции может быть добавлен блок else. В нём указано то, что выполняется в том случае, если исходное условие неверно.

if rank(A)<3 b=1

else b=2

end

Возможно большее количество блоков ветвления. В таких случаях используется команда elseif.

if (x<=0) || (x>=3) y = 0;

elseif x<1 y = x; elseif x<2 y = 1;

else

y = 3-x; end

В данном случае идёт последовательная проверка условий. Сначала проверяется условие (x<=0) || (x>=3), в том случае, если оно не выполняется, обработчик переходит к следующему (x<1).

163

Если одно из условий оказывается верным, то все последующие не выполняются.

4.4.2. Цикл с условием

Цикл while исполняет инструкции, содержащиеся внутри блока, до тех пор, пока заданное условие выполняется. Следующий код показывает, за сколько шагов гармонический ряд достигает 10.

H = 0; n = 1;

while H<10

H = H+1/n; n = n+1;

end n

n=

12368

H

H = 10.000043

4.4.3. Цикл со счётчиком

Цикл со счётчиком if выполняется определённое число раз, которое задаётся при объявлении цикла. В следующем примере показано, как выполняется цикл 12368 раз.

H =

0;

for

n=1:12368

H

= H+1/n;

end

 

H

 

H =

 

10.000043

4.4.4. Оператор выбора

Оператор выбора switch эквивалентен оператору if. Используется, если необходимо описать больше одного условия.

164

switch number case 1

disp('Hydrogen') case 2

disp('Helium') case 3

disp('Lithium') end

4.5. Моделирование задач в Maltab и Comsol Script

4.5.1. Объектная модель FEMLAB

Любую задачу, решаемую и поставленную в FEMLAB можно решить написанием и выполнением скрипта в Matlab, или Comsol Script. Скрипт работает с теми же объектами и функциями, что и графическая среда, и выполняет те же самые действия. Фактически суть решения совершенно не зависит от того, как решать задачу, графически, или в Matlab/Comsol Script. Можно задаться вопросом – зачем тогда вообще использовать Comsol Script, если все действия можно и так выполнить в графической среде? Ответ на этот вопрос заключается в том, что моделирование посредством выполнения скриптов будет более гибким, позволит учесть различные нюансы в постановке и решении. При наличии ошибки в модели её проще выявить во время выполнения скрипта. Вообще, большинство задач можно решить, не прибегая к программированию, однако в случае сложных систем, или нестандартных условий задачи – без него не обойтись. Одно из наиболее тривиальных применений скриптов – задание геометрии задачи из данных файла. Данную опцию невозможно произвести в графической среде. Также с помощью скрипта задаются сложные области, которые сложно прорисовывать вручную. В любом случае владение инструментом Comsol Script существенно расширит возможности моделирования физических процессов на FEMLAB.

Рассмотрим основные особенности программного моделирова-

ния в FEMLAB.

Поскольку пакет FEMLAB написан на языке JAVA, он использует некоторые особенности этого языка. Так же, как и в языке JAVA, все сущности в FEMLAB представлены в виде объектов и

165

их свойств и методов. Основной объект, с которым работает система, это объект модели, чаще всего он обозначается как fem. У объекта модели есть следующие свойства (являющиеся в свою очередь также объектами):

dim – размерность модели; geom – геометрия модели;

equ – вид уравнения (коэффициенты); bnd – граничные условия;

edg – рёберные условия (для трёхмерных моделей); pnt – точечные условия;

sshape – конечные элементы;

form – форма задания уравнения (строгая в явном виде, или слабая в интегральном);

const – константы;

expr – регулярные выражения;

ode – дополнительные ОДУ и скалярные уравнения, входящие в модель;

mesh – сетка.

Обращение к свойствам объекта, происходит через точку. Так, например, задать геометрию модели в виде окружности можно инструкцией

C» fem.geom=circ2(0,0,1).

Свойства модели также являются объектами и могут иметь свои свойства. Например, для свойства вида уравнения equ есть свойства, задающие соответствующие коэффициенты в уравнении.

C» fem.equ.f=1.

4.5.2.Решение уравнения Пуассона

Вкачестве примера решим уравнение Пуассона на круге

 

u = − f

 

;

 

 

 

 

 

Ω

 

 

 

 

.

 

 

u = 0

 

 

 

 

 

∂Ω

 

 

 

 

 

 

 

166

Область Ω представляет собой окружность с центром в точке (0;0) и радиусом 1. Аналитическое решение подобного уравнения будет иметь вид:

u(x, y) =1 x2 y2 . 4

Таким образом, можно сравнить полученное численное решение с точным на точках нашей сетки.

1. В первую очередь подготовим объект модели к решению новой задачи:

clear fem;

2. Объект геометрии модели geom зададим, как окружность в точке (0;0) с радиусом 1

fem.geom=circ2(0,0,1);

3. Далее, инициализируем функцией meshinit сетку на области, определённой в поле fem.geom

fem.mesh=meshinit(fem);

4. Для задания вида выбранного уравнения, будем использовать коэффициентную форму простых уравнений (режим PDE Coefficient form в навигаторе моделей, в данном случае задан по умолчанию), зададим c и f, равными 1. Граничные условия вида hu=r должны иметь вид u=0. Соответственно, переменную h необходимо задать, как 1, а в r уже хранится 0 по умолчанию.

fem.equ.f=1;

fem.equ.c=1;

fem.bnd.h=1;

5. По умолчанию имя искомой переменной – u. Поменять имя переменной можно свойством dim. Следующая инструкция меняет переменную задачи на T.

fem.dim='T';

167

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

fem.shape=2;

7. Сделаем сетку более плотной. Функция meshextend создаёт сетку с плотностью, необходимой для решения задачи.

fem.xmesh=meshextend(fem);

8. Далее запускаем решение и выводим его на экран.

fem.sol=femlin(fem);

postplot(fem,'tridata','u','triz','u');

9. Вычислим максимальное отклонение нашего решения от аналитического.

pd=posteval(fem,'u-(1-x^2-y^2)/4'); er=max(max(pd.d));

10. Если отклонение недостаточно низкое, можно участить сет-

ку

fem.mesh=meshrefine(fem);

fem.xmesh=meshextend(fem);

11. Решим задачу на новой учащённой сетке и выведем решение на экран

fem.sol=femlin(fem);

postplot(fem,'tridata','u','triz','u');

В следующих пунктах разберём каждый компонент объекта модели более подробно.

168

Рис. 4.2. Форма импорта модели

4.5.3. Импорт и экспорт модели

Когда модель в Comsol Script создана вышеописанным образом, её можно импортировать в главную программу и работать с ней там. Так же, наоборот, любую созданную в графическом интерфейсе Comsol Multiphysics модель можно экспортировать в Comsol Script для детального рассмотрения.

Итак, мы находимся в про-

грамме Comsol Multiphysics.

Чтобы импортировать из командной строки созданную там модель необходимо вызвать пункт меню File->Import->FEM Structure… (рис. 4.2).

В полученном окне вводится название объекта импортируемой модели.

Так же, можно импортировать не всю модель, а только её геометрию. Для этого необходимо вызвать пункт меню File->Import- >Geometry objects… и в аналогичном окне указать созданный в Comsol геометрический объект (рис. 4.3). Для примера, создадим круг с центром в точке (2; 3) и радиусом 4:

cr = circ2(2,3,4);

В окне программы Comsol Multiphysics укажем cr. Созданный круг появится в модели.

Для экспорта созданной модели из Comsol Multiphysics в Matlab или Comsol Script достаточно нажать Ctrl+F или вызвать пункт меню File->Export->FEM Structure as fem, либо File- >Export->FEM Structure… В

первом случае модель экспортируется под именем fem, а во втором случае будет предлагается создать пользователю. Стоит,

однако, учитывать, что перемен-

Рис. 4.3. Форма импорта геометрии

ные, используемые в модели, модели которые с момента создания мо-

169

дели не менялись, и содержат значения по умолчанию, не будут экспортированы, а в Comsol Script соответствующие значения по умолчанию могут быть другими. Чтобы избежать возможных проблем, следует их включить в экспорт. Для этого необходимо вызвать пункт меню Options->Preferences. В полученном окне выбрать вкладку Modeling, где включить флажок Include default values.

4.6.Создание геометрических объектов

4.6.1.Создание базовых геометрических объектов

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

geom0, geom1, geom2 и geom3.

В трёхмерной геометрии доступны для использования объёмные объекты solid3, поверхностные объекты (face3) (общий класс для двумерных объектов в трёхмерном пространстве), кривые (curve3) и точки (point3), все они подклассы для класса geom3. Вышеперечисленные объекты имеют также подклассы, представляющие собой основные геометрические трёхмерные объекты. Прямоугольные блоки, сферы, цилиндры от класса solid3, сферы и полые блоки от класса face3 и т.д.

В двумерной геометрии используются следующие подклассы класса geom2. solid2 для сплошных объектов, curve2 для рациональных кривых Безье (общий класс для одномерных объектов в двумерном пространстве), и point2 для точек. От класса solid2 существуют подклассы, отвечающие за создание прямоугольников, квадратов, эллипсов и окружностей.

В одномерной геометрии используется класс geom1 и его подклассы solid1 для интервалов и point1 для точек.

Рассмотрим более подробно создание двумерных объектов. Следующие классы – наследники класса solid2 создают основные двумерные фигуры.

rect2(x1,x2,y1,y2) – прямоугольник с диагональю {(x1,

y1);(x2, ,y2)};

170

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]